objective-c - 基于文档的应用程序的核心数据版本控制

标签 objective-c cocoa core-data structure versioning

我的应用程序使用核心数据。现在,随着新版本的发布,我需要更改数据库结构。 我知道这是通过版本控制完成的,但我发现所有教程都不适用于基于文档的应用程序,并且在某些时候我陷入困境。如何在基于文档的应用程序上实现版本控制,其中文档就是数据库本身并且可以具有任何名称?

谢谢

---附加信息----

我需要做的是:打开应用程序,点击“打开”按钮,从文件系统中选择 NSManagedDocument。这是我的数据库(可以有任何名称),如果在打开时检测到它是旧结构,则应该将其结构更新为当前结构。 (添加一栏)

最佳答案

在我看来,将 SQLite 存储包装到 NSManagedDocument 中的事实与模型版本控制过程无关。

只需在代码中添加持久存储选项并在 Xcode 中添加新模型版本即可。

当设置核心数据堆栈时 - 即选择带有数据库的文档之后 - 您必须在创建持久性存储协调器时将这些选项添加到持久性存储:

NSString * const NSMigratePersistentStoresAutomaticallyOption;
NSString * const NSInferMappingModelAutomaticallyOption;

正如这些选项的名称所暗示的,它应该从这里自动工作。实际的调用看起来像这样:

[persistentStoreCoordinator 
   addPersistentStoreWithType:NSSQLiteStoreType
   configuration:@"Default"
   URL:fileURL 
   options:@{NSMigratePersistentStoresAutomaticallyOption : @(YES),
             NSInferMappingModelAutomaticallyOption       : @(YES)}
   error:&error];

关于objective-c - 基于文档的应用程序的核心数据版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18300504/

相关文章:

ios - Objective-C 可变子类模式?

macos - 在 OS X 10.10 中,我可以在没有 NSCell 的情况下实现 NSControl 吗?

swift - 基于文档的核心数据应用程序 - 添加和删除附加属性

ios - 在 CoreData 的 fetchedObjects 中编辑多个对象

objective-c - iOS 7 已弃用用于应用内购买的 transactionReceipt。我可以用什么代替它?

objective-c - 如何将对象附加到 NSMutableArray?

objective-c - 如何使用 Cocoa 以编程方式更改键盘布局?

objective-c - 通过 Cocoa API 获取机器类型和其他硬件详细信息

objective-c - 将两个 JSON 文件中的数据写入具有关系的核心数据模型

iphone - 数据未更新的 NSFetchedResultsController