Core data @绑定-将获取的结果(单个实体)传递到核心数据中的子视图+;迅捷
我只想通过绑定将核心数据实体的绑定传递到ForEach循环中的SwiftUI子视图屏幕,这样我就可以编辑实体的属性,保存上下文并获得自动更新的视图 我如何才能实现这样的目标:Core data @绑定-将获取的结果(单个实体)传递到核心数据中的子视图+;迅捷,core-data,swiftui,binding,Core Data,Swiftui,Binding,我只想通过绑定将核心数据实体的绑定传递到ForEach循环中的SwiftUI子视图屏幕,这样我就可以编辑实体的属性,保存上下文并获得自动更新的视图 我如何才能实现这样的目标: ContentView { @Environment(\.managedObjectContext) private var viewContext @FetchRequest(entity:ToDo.entity(), sortDescriptors: []) private var toDoItems: F
ContentView {
@Environment(\.managedObjectContext) private var viewContext
@FetchRequest(entity:ToDo.entity(), sortDescriptors: [])
private var toDoItems: FetchedResults<ToDo>
... the following part is what I need:
ForEach(toDoItems) { (item:ToDo) in
NavigationLink(
destination: MyEditView($item),
...
}
}
ContentView{
@环境(\.managedObjectContext)私有变量viewContext
@FetchRequest(实体:ToDo.entity(),排序描述符:[])
私有变量toDoItems:FetchedResults
…以下部分是我需要的:
ForEach(toDoItems){(项目:ToDo)in
导航链接(
目的地:MyEditView($item),
...
}
}
您需要设置一个@ObservedObject变量项:ToDo
。您的CoreData实体是一个符合observeObject
的类,当其中的任何属性发生更改时,它将强制进行视图更新
struct NextView: View {
@Environment(\.managedObjectContext) var managedObjectContext
@ObservedObject var item: ToDo
var body: some View {
Button(action: {
item.name = "New value"
if managedObjectContext.hasChanges {
do {
try self.managedObjectContext.save()
print("SAVED CONTEXT")
} catch let error {
print("Error: SAVING CONTEXT \(error), \(error.localizedDescription)")
}
}, label: {
Text("\(item.name)")
})
}
}
您现在可以进行任何更改,并在需要时保存上下文谢谢,这为我指明了正确的方向!