我在这里遇到了一些麻烦Core Data
and 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,
......)
and
struct MyListView: View {
var localList: FetchedResults<MyEntity>
.....
}
如果你想MyListView
行为基于FetchRequest
然后将其显式注入到主视图中,与主视图类似,CoreData 会缓存获取的实体,因此没有缺点。
....
您必须为此在工作表视图中显式传递上下文环境,例如 MyListView().environment(.managedObjectContext, self.managedObjectContext)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)