我希望有一个可以由用户自定义的模型。使用核心数据是否可行,还是有更好的解决方案?
谢谢matchi。
附注:这是一个Mac OS应用程序!
谢谢matchi。
附注:这是一个Mac OS应用程序!
这在苹果的Core Data Utility Tutorial 的"Creating the Managed Object Model"下有解释。通常来说,一旦你获得了对托管对象模型的引用,你可以使用NSEntityDescription
和NSAttributeDescription
类来自定义托管对象模型中的实体及其属性。
但需要注意,大多数情况下,一旦修改了托管对象模型,则它将不再与现有的持久化数据存储兼容,这意味着你必须将数据从旧的持久化存储迁移到新的存储,这绝对不是一个轻松的任务。
当然,如评论中所述,Core Data也可以自动迁移数据,这个过程称为轻量级迁移。一般来说,要实现这一点,Core Data需要在运行时自己找到源和目标托管对象模型。(Core Data搜索NSBundle的allBundles和allFrameworks方法返回的捆绑包。) 然后,它必须分析持久化实体和属性的模式变化,并生成一个推断的映射模型。为了使Core Data能够做到这一点,这些更改必须符合明显的迁移模式,例如: