在SwiftUI中使用核心数据

rad*_*dev 6 core-data ios swiftui

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

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

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

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

更新:

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

这是我将在我的应用程序中采用的方法。

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

更新2-2019.08.14

Xcode beta 5具有一些新的Core Data功能。我使用此博客文章中的信息来获取我所需的大部分信息。

Mec*_*cid 5

您可以为 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
  }
}
Run Code Online (Sandbox Code Playgroud)

一旦您查询完成并分配给人员属性的值,SwiftUI 将重新加载视图以读取新值。