【问题标题】:Using Core Data with SwiftUI在 SwiftUI 中使用 Core Data
【发布时间】:2019-11-01 05:13:11
【问题描述】:

我在学习 SwiftUI 方面取得了进步,但在将它与 Core Data 结合使用时遇到了困难。

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

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

谁能概述将 Core Data 与 SwiftUI 结合使用的基本步骤?

更新:

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

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

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

更新 2 - 2019.08.14

Xcode beta 5 有一些新的 Core Data 特性。我使用blog post 中的信息来获取我需要的大部分内容。

【问题讨论】:

  • 由于没有评论,我只能假设我下面的答案由于某种原因不合适,所以我删除了它。如果您仍在寻找有关如何在 SwiftUI 中使用 CoreData 的一些提示和技巧,并且需要一个起点,请查看我对 stackoverflow.com/questions/57348127/… 的回答
  • @ChuckH 对不起,我什至没有看到你的答案。不过,您的示例项目看起来非常棒。

标签: ios core-data swiftui


【解决方案1】:

您可以为核心数据逻辑编写一个包装器,例如 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
  }
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    相关资源
    最近更新 更多