@Binding - 将 FetchedResults、单个实体传递给 Core Data + SwiftUI 中的子视图

@Binding - passing FetchedResults, single Entities, to SubViews in Core Data + SwiftUI

我只想将绑定传递到核心数据 - 实体到带有绑定的 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),
      ...
  }
}

您需要设置一个@ObservedObject var item: ToDo。您的 CoreData 实体是符合 ObservableObject 的 class,并且在其中任何 属性 发生更改时将强制更新视图。

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

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