【问题标题】:SwiftUI handling SpriteKit scene recreation when data changesSwiftUI 在数据更改时处理 SpriteKit 场景重新创建
【发布时间】:2020-11-09 20:57:39
【问题描述】:

我有一个连接到CoreData 模型的SwiftUI 视图。我还有一个SpriteKit 场景,它改变了我的模型中的数据。因此,每次我在 CoreData 中操作我的 SKScene 中的数据时,我的场景都会重新初始化,这在我的情况下是不受欢迎的行为。

如何在不重新创建SKScene 的情况下在SpriteView 中获取更新的模型?

我的代码如下所示:

struct TamagotchiListView: View {

@Environment(\.managedObjectContext)
var context: NSManagedObjectContext

@FetchRequest(fetchRequest: TamagotchiModel.getFetchRequest())
var tamagotchis: FetchedResults<TamagotchiModel>

var body: some View {
    VStack {
        List {
            ForEach(tamagotchis, id: \.self) { (tamagotchi: TamagotchiModel) in
                NavigationLink(destination: SpriteKitView(scene: SpriteKitScene(model: tamagotchi))) {
                    HStack {
                        Image(systemName: "gamecontroller")
                            .padding(.trailing, 5)
                        VStack(alignment: .leading) {
                            Text(tamagotchi.name)
                                .font(.headline)
                            Spacer()
                            Text(tamagotchi.birthDate, style: .date)
                        }
                        Spacer()
                    }
                }
            }
        }
    }
}

【问题讨论】:

  • 需要某种可重现的例子来避免猜测。

标签: core-data sprite-kit swiftui


【解决方案1】:

如果需要,我通过创建一个管理 SpriteKit 场景创建的视图模型来解决我的问题。

class TamagotchiViewModel {
    
    private var spriteKitScenes: [SpriteKitScene] = []
    
    func scene(for tamagotchi: TamagotchiModel) -> SpriteKitScene {
        if let scene = spriteKitScenes.first(where: { $0.tamagotchi?.tamagotchiModel.id == tamagotchi.id}) {
            return scene
        } else {
            let newScene = SpriteKitScene(model: tamagotchi)
            spriteKitScenes.append(newScene)
            return newScene
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-04
    • 2021-10-17
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多