我想要一个可以由用户定制的模型。 是否可以使用核心数据或是否有更好的解决方案?
感谢matchi
Ps:它是mac os的应用程序!
答案 0 :(得分:8)
这是在Apple的"Creating the Managed Object Model"的Core Data Utility Tutorial下解释的。通常,一旦引用了托管对象模型,就可以使用NSEntityDescription
和NSAttributeDescription
类来自定义托管对象模型中的实体及其属性。
但是,请注意,在大多数情况下,一旦修改了托管对象模型,它将不再与现有的持久性数据存储兼容,这意味着您必须将数据从旧的持久性存储迁移到新的持久性存储。这绝对不是一个可以掉以轻心的努力。
当然,正如评论中所提到的,Core Data也可以自动迁移数据,这个过程称为轻量级迁移。但总的来说,这样做
核心数据需要能够找到 源和目标托管对象 在运行时模拟自己。 (核心数据 搜索返回的包
NSBundle
allBundles
和allFrameworks
{{1}}方法。)然后必须 分析架构更改 持久性实体和属性 生成推断的映射模型。 为了使核心数据能够做到这一点, 变化必须明显 迁移模式,例如:
- 简单添加新属性
- 非可选属性变为可选
- 可选属性变为非可选属性,并定义默认值
这是否适合您的使用案例,或者您是否希望允许您的用户更改托管对象模型,从而无法实现轻量级迁移?
在任何情况下,我强烈建议您在尝试允许用户修改Core Data模型之前先阅读以下文档。
答案 1 :(得分:1)
请参阅NSManagedObjectModel reference page ...
托管对象模型是可编辑的 直到它们被对象图使用 经理...然而,一旦模型是 使用时,不得更改......
我认为这绝对是一个高级的核心数据主题(核心数据本身已经是一个非常先进的主题),不能轻易进行。如果让用户修改模型,我不确定已存储在数据存储中的任何数据是否有用(甚至可用)。