繁体   English   中英

使用 Core Data 提供的数据(在 SwiftUI 中)并与另一个视图共享

[英]Using data provided by Core Data (in SwiftUI) and sharing with another view

在这里,我在使用Core DataSwiftUI时遇到了一些问题。

我的主视图可以访问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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM