【问题标题】:Sharing model between documents in a document-based app在基于文档的应用程序中的文档之间共享模型
【发布时间】:2021-02-19 04:45:03
【问题描述】:

我的应用是基于文档的,并使用NSPersistentDocument 来管理其核心数据堆栈。

当每个文档都有自己的数据时效果很好,但现在我希望文档共享其模型的一部分。 就我而言,用户导入大文件,我不想为每个文档复制它们。

我想要一个与应用程序本身紧密而不是特定文档的模型。

我真的不知道该怎么做。 NSPersistentDocument 提供了一些覆盖配置核心数据堆栈的方法,但我不知道如何设置它。 谁能给我一些提示如何实现这一目标?

【问题讨论】:

  • 如果我理解正确,您可以实现某种数据管理器,然后通过委托访问。这样,原始数据将保存在一个位置,并且所有单个文档都可以访问它。打开文档时,让系统检查哪些已经加载到管理器中,哪些没有。

标签: ios macos core-data


【解决方案1】:

非常有趣的案例,

NSPersistentDocument : 可以与 Core Data 集成的文档对象 https://developer.apple.com/documentation/appkit/nspersistentdocument#relationships

我会为 MVC 意识形态添加我的 2 便士:

模型-视图-控制器 (MVC) 是一种架构模式,它将应用程序分为三个主要逻辑组件:模型、视图和控制器。这些组件中的每一个都是为处理应用程序的特定开发方面而构建的。

虽然它非常适合关系数据库,例如可以进行级联删除的 SQL,以及其他基于查询的操作。

但是当您想在 2 个对象之间耦合数据时,您会遇到一些问题。

  • 如果任何文档/记录依赖于其他同级,则需要同步它们,这通常是一个痛苦的**。
  • 如果任何文档非常大,如果它与 db 的其他成员有级联依赖关系,您的数据库就会开始出汗。

可能的解决方案

由于持久化文档可以与核心数据集成,请尝试将任何新数据放入核心数据并计算差异。

设计原则背后的意识形态

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.

here is the full pdf

【讨论】:

  • 我实际上最终通过拥有多个商店来实现这一点。我的另一个问题中的更多详细信息:stackoverflow.com/questions/64808268/…
  • 随心所欲,但请牢记这 3 条原则。 Beautiful is better than ugly.Explicit is better than implicit.Simple is better than complex.
  • 谢谢 :) 我确实认为我的解决方案非常优雅。在我看来,Core Data 的构建考虑了这些场景——因此支持拥有多个商店。我不确定如何解决“同步”部分,但后来我发现这只是响应“保存”通知并合并适当更改的问题——这只是几行代码。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多