SwiftUI - 在 Coredata 中添加链接对象后视图不更新

SwiftUI - View not updating after adding linked object in Coredata

我有一个名为 InstanceView 的 SwiftUI 视图,它显示了 NagivationViewInstance 的详细信息。 NavigationView 中的链接是来自 Coredata 的对象,称为 Instances,而且在 Coredata 中,我有一个名为 Solve 的实体。 InstanceSolve 是一对多的关系。 InstanceView 显示链接到它的 Solve 的列表。

我的问题是,当我从我的 InstanceView 创建一个新的 Solve,并将其添加到 Instance 时,新的解决方案没有出现在 InstanceView 直到我 select 一个不同的 InstanceNavigationView 和 return 到原来的 Instance.

这里是 NavigationView 中的 List,它控制 InstanceView 中显示哪个 Instance

List {
    ForEach(Array(zip(instances.indices, instances)), id: \.0) { index, instance in
        NavigationLink(destination: InstanceView(instance: instance), tag: index, selection: $selectedInstanceIndex) {
            InstanceRow(instance: instance)
        }
    }
}

这是InstanceView:

struct InstanceView: View {
    @Environment(\.managedObjectContext) private var viewContext
    
    var instance: Instance
    
    var body: some View {
        List {
            ForEach(instance.solveArray, id: \.self) { solve in
                Text(String(solve.time))
            }
        }
        .navigationTitle(instance.wrappedName)
        .navigationSubtitle(instance.wrappedPuzzle)
        
        Button("add solve") {
            addSolve()
        }
        
    }
    
    private func addSolve() {
        withAnimation {
            let newSolve = Solve(context: viewContext)
            newSolve.time = 3.2
            newSolve.dnf = false
            newSolve.plusTwo = false
            newSolve.timestamp = Date()

            instance.addToSolve(newSolve)

            do {
                try viewContext.save()
            } catch {
                let nsError = error as NSError
                fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
            }
        }
    }
}

所以我想知道如何强制 InstanceView 更新,以便它显示从其中添加的新 Solve

谢谢!

尝试在“InstanceView”中使用它:

@State var instance: Instance

@Binding var instance: Instance

如果这不起作用,您最好的选择是将“实例”设为 class 和 ObservableObject 并按此方式执行。

我想通了这一点,并认为我会 post 我的解决方案,以防其他人遇到同样的问题。我可以通过在 var instance: Instance.

前面添加 @ObservedObject 来解决这个问题