在运行时自定义核心数据模型?

mat*_*chi 4 database macos cocoa core-data objective-c

我想要一个可以由用户定制的模型.是否可以使用核心数据或是否有更好的解决方案?

谢谢matchi

Ps:它是mac os的应用程序!

Chr*_*ick 8

这在Apple的Core Data Utility Tutorial的"创建托管对象模型"中进行解释.通常,一旦引用了托管对象模型,就可以使用和类来自定义托管对象模型中的实体及其属性.NSEntityDescriptionNSAttributeDescription

但请注意,在大多数情况下,一旦修改托管对象模型,它将不再与现有的持久性数据存储兼容,这意味着您必须将数据从旧的持久性存储迁移到新的持久性存储.这绝对不是一种轻视的努力.

当然,正如评论中所提到的,Core Data也可以自动迁移数据,这一过程称为轻量级迁移.但总的来说,这样做

核心数据需要能够在运行时自行查找源和目标托管对象模型.(Core Data搜索由NSBundles allBundlesallFrameworks方法返回的包 .)然后,它必须分析对持久实体和属性的模式更改,并生成推断的映射模型.要使Core Data能够执行此操作,更改必须符合明显的迁移模式,例如:

  • 简单添加新属性
  • 非可选属性变为可选
  • 可选属性变为非可选属性,并定义默认值

这是否适合您的用例,或者您是否希望允许您的用户更改托管对象模型,从而无法实现轻量级迁移?

在任何情况下,我强烈建议您在尝试允许用户修改Core Data模型之前先阅读以下文档.