@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)")
})
}
}
您现在可以根据需要进行任何更改并保存上下文
我只想将绑定传递到核心数据 - 实体到带有绑定的 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)")
})
}
}
您现在可以根据需要进行任何更改并保存上下文