【问题标题】:@Binding - passing FetchedResults, single Entities, to SubViews in Core Data + SwiftUI@Binding - 将 FetchedResults、单个实体传递给 Core Data + SwiftUI 中的子视图
【发布时间】:2021-04-02 17:11:04
【问题描述】:

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

【问题讨论】:

    标签: core-data swiftui binding


    【解决方案1】:

    您需要设置一个@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)")
        })
      }
    }
    

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

    【讨论】:

    • 谢谢,这为我指明了正确的方向!
    猜你喜欢
    • 2021-10-20
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    相关资源
    最近更新 更多