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

use*_*957 2 binding core-data swiftui

我只想将到 Core Data - Entity 的绑定传递到带有绑定的 ForEach 循环内的 SwiftUI SubView 屏幕,这样我就可以编辑该实体的属性,我可以保存我的上下文并获取自动更新的视图。

我怎样才能实现这样的目标:

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),
      ...
  }
}
Run Code Online (Sandbox Code Playgroud)

Jev*_*les 5

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

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)")
    })
  }
}
Run Code Online (Sandbox Code Playgroud)

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