[英]Using data provided by Core Data (in SwiftUI) and sharing with another view
在这里,我在使用Core Data
和SwiftUI
时遇到了一些问题。
我的主视图可以访问Core Data
中实体的一些信息。
我想将它传递给子视图,使用某种绑定,以便它也可以访问这些数据并可能更新它。
这是我尝试过的代码的一个版本。
在主视图方面:
@Environment(\.managedObjectContext) var managedObjectContext
......
@FetchRequest(
entity: MyEntity.entity(),
sortDescriptors: [NSSortDescriptor(keyPath: \MyEntity.name,
ascending: true)]
) var myList: FetchedResults<MyEntity>
......
var body: some View {
VStack {
Button(action: {
..........
}).sheet(isPresented: $showingList) {
MyListView(localList: self.$myList,
moc:self.managedObjectContext,
......)
}
.....
}
在子视图方面:
struct MyListView: View {
@Binding var localList: FetchedResults<MyEntity>
.....
}
在上面的代码中,@FetchRequest 正在工作,获取我期望的信息。 但在那之后,我试图让@FetchRequest 表现得像@State。 它不起作用。 让我的子视图(即 MyListView)访问@FetchRequest 提供的数据的正确方法是什么?
在写这篇文章之前,我显然已经尝试了一些其他的代码变体,同时阅读了一些教程; 但它仍然不起作用。
您不能修改FetchedResults
,因为它是只读的,所以只需按原样传递
MyListView(localList: self.myList,
moc:self.managedObjectContext,
......)
和
struct MyListView: View {
var localList: FetchedResults<MyEntity>
.....
}
如果您希望MyListView
的行为基于FetchRequest
,则将其注入其中,与您对主视图所做的类似,CoreData 缓存获取的实体,因此没有缺点。
....您必须为此明确地在工作表视图中传递上下文环境,例如 MyListView().environment(.managedObjectContext, self.managedObjectContext)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.