Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Core data 数据更改时SwiftUI处理SpriteKit场景再现_Core Data_Sprite Kit_Swiftui - Fatal编程技术网

Core data 数据更改时SwiftUI处理SpriteKit场景再现

Core data 数据更改时SwiftUI处理SpriteKit场景再现,core-data,sprite-kit,swiftui,Core Data,Sprite Kit,Swiftui,我有一个连接到CoreData模型的SwiftUI视图。我还有一个SpriteKit场景,可以更改模型中的数据。因此,每次我在CoreData中操作SKScene中的数据时,我的场景都会重新初始化,这在我的案例中是不必要的行为 如果不重新创建SKScene,如何在我的SpriteView中获取更新的模型 我的代码如下所示: struct TamagotchiListView: View { @Environment(\.managedObjectContext) var context: NS

我有一个连接到
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()
                    }
                }
            }
        }
    }
}
struct TamagotchiListView:视图{
@环境(\.managedObjectContext)
变量上下文:NSManagedObjectContext
@FetchRequest(FetchRequest:TamagotchiModel.getFetchRequest())
var tamagotchis:获取结果
var body:一些观点{
VStack{
名单{
ForEach(tamagotchis,id:\.self){(tamagotchi:TamagotchiModel)在
导航链接(目的地:SpriteKitView(场景:SpriteKitScene(型号:tamagotchi))){
HStack{
图像(系统名:“游戏控制器”)
.padding(.training,5)
VStack(对齐:。前导){
文本(tamagotchi.name)
.font(.headline)
垫片()
文本(tamagotchi.birthDate,样式:.date)
}
垫片()
}
}
}
}
}
}

我通过创建一个视图模型来解决我的问题,该模型可以在需要时管理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
        }
    }
}

需要某种可复制的例子来避免猜测。