在SwiftUI中使用核心数据

时间:2019-06-18 14:12:10

标签: ios core-data swiftui

我在学习SwiftUI方面取得了进步,但是在将它与Core Data结合使用时却陷入困境。

  • 模型对象-我制作了几个具有所需属性和关系的实体
  • ???我不知道从哪里开始。如何让SwiftUI与Core Data对话?
  • SwiftUI-我有一些基本的布局正在工作,并显示了一些临时类的数据,但这些布局对Core Data并不了解

最近几天,我一直在搜索和阅读有关该主题的所有文章,但是我不知道如何开始解决该问题。

有人能概述在SwiftUI中使用Core Data的基本步骤吗?

更新:

我在Twitter上收到了一些其他反馈,并且一位开发人员建议,SwiftUI列表可能不适合使用具有大数据集的Core Data。在此处阅读帖子:https://twitter.com/numist/status/1141012785825845248

这是我要在我的应用中采用的方法。

  • 列表视图:
    • UITableViewController(带有FetchedResultsController)
    • 管理与核心数据存储区的连接
    • 使用依赖注入将记录传递到详细信息视图
  • 详细信息/编辑视图:
    • 尽可能使用UIHostingController构建这些对象
    • 使用SwiftUI表单制作简单的数据输入表单
    • 通过依赖项注入接收数据
    • 将数据复制到临时BindableObject类型
      • 使本地UI机会进入临时记录
      • 将临时数据保存到退出时的实际记录中

2 个答案:

答案 0 :(得分:1)

您可以为Core-Data逻辑(如EntityManager)编写包装器,然后在BindableObject中使用它

class PersonStore: BindableObject {
  var didChange = PassthroughSubject<Void, Never>()

  var persons: [PersonEntity] = [] {
      didSet {
          didChange.send(())
      }
  }

  func fetchPersons(matching name: String) {
    // make you core data query here and assign it to persons property
  }
}

查询完成后,分配给人员属性的值SwiftUI将重新加载View以读取新值。

答案 1 :(得分:-1)

我同意@mecid,关键是它的异步过程。 在Beta 4中,didChange变为willChange。 我在https://github.com/rsteinberger/UXIContacts

有一个有效的示例