swift - SwiftUI - 在Coredata中添加链接对象后视图不更新
问题描述
我有一个名为 的 SwiftUI 视图InstanceView
,它显示了Instance
来自 a的详细信息NagivationView
。中的链接NavigationView
是 Coredata 中称为Instance
s 的对象,在 Coredata 中,我有一个名为Solve
. Instance
与 有一对多的关系Solve
。InstanceView
显示Solve
链接到它的 s 列表。
我的问题是,当我创建一个新Solve
的 并将其添加到Instance
我InstanceView
的 中时,新的解决方案不会出现在 中,InstanceView
直到我在 中选择不同Instance
的NavigationView
,并返回到原来的Instance
.
这是控件的List
内部,如下所示:NavigationView
Instance
InstanceView
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
如果这不起作用,你最好的办法是让“Instance”成为一个类和 ObservableObject 并这样做。
推荐阅读
- bash - 我真的可以使用 ANSI 转义序列保存几个光标位置吗?
- c# - 如何简化我的嵌套 for 循环
- postgresql - PostgreSQL“元组已自行更新”
- d - 浮点的这个特性是什么?
- clojure - 在 Clojure 中检查 core.async/sliding-buffer 中的元素
- makefile - 如何使用文件列表执行 Makefile 模式规则
- jquery - jQuery放大和缩小可滚动div,当所有内容可见时消除滚动
- batch-file - 将 .BAT 转换为 .SH
- c# - 带有 .Net 核心的 iTextSharper 使用 iTextSharpLGPLv2.Core
- java - 如何创建一个填充不同类型对象的 ArrayList?