Core data @绑定-将获取的结果(单个实体)传递到核心数据中的子视图+;迅捷

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

我只想通过绑定将核心数据实体的绑定传递到ForEach循环中的SwiftUI子视图屏幕,这样我就可以编辑实体的属性,保存上下文并获得自动更新的视图

我如何才能实现这样的目标:

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)")
    })
  }
}

您现在可以进行任何更改,并在需要时保存上下文

谢谢,这为我指明了正确的方向!