SwiftUI - 在Coredata中添加链接对象后视图不更新
Posted
技术标签:
【中文标题】SwiftUI - 在Coredata中添加链接对象后视图不更新【英文标题】:SwiftUI - View not updating after adding linked object in Coredata 【发布时间】:2021-06-30 23:13:06 【问题描述】:我有一个名为 InstanceView
的 SwiftUI 视图,它显示了来自 NagivationView
的 Instance
的详细信息。 NavigationView
中的链接是来自 Coredata 的对象,称为 Instance
s,在 Coredata 中,我有一个名为 Solve
的实体。 Instance
与 Solve
具有一对多关系。 InstanceView
显示链接到它的Solve
s 列表。
我的问题是,当我从我的InstanceView
创建一个新的Solve
并将其添加到Instance
时,新的解决方案不会出现在InstanceView
中,直到我选择不同的@987654335 @在NavigationView
中,并返回原来的Instance
。
这是NavigationView
中的List
,它控制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
。
谢谢!
【问题讨论】:
【参考方案1】:尝试在“InstanceView”中使用它:
@State var instance: Instance
或
@Binding var instance: Instance
如果这不起作用,你最好的办法是让“Instance”成为一个类和 ObservableObject 并这样做。
【讨论】:
不幸的是,状态和绑定不起作用。我想尝试使用 ObservableObject,但我不确定如何使用 Coredata 中的类来做到这一点。这是我的实例类:pastebin.com/20hTjMFy。我认为 NSManagedObject 已经符合 ObservableObject 了?但我不确定从那里去哪里。【参考方案2】:我想通了,并想我会发布我的解决方案,以防其他人遇到同样的问题。我可以通过在var instance: Instance
前面添加@ObservedObject
来解决这个问题。
【讨论】:
以上是关于SwiftUI - 在Coredata中添加链接对象后视图不更新的主要内容,如果未能解决你的问题,请参考以下文章
访问全局函数内的环境变量 - SwiftUI + CoreData
SwiftUI:如何从 Siri Intent 添加 CoreData 记录
SwiftUI CoreData - 如何更新获取请求和列表