我的应用程序使用核心数据。现在,随着新版本的发布,我需要更改数据库结构。我知道这是通过版本控制完成的,但我发现,所有教程都不适用于基于文档的应用程序,有时我会卡住。如何在基于文档的应用程序上实现版本控制,其中文档是数据库本身并且可以有任何名称?
谢谢
- -附加信息 - -
我需要做的是:打开应用程序,点击“打开”按钮,从文件系统中选择 NSManagedDocument。那是我的数据库(可以有任何名称),如果在打开它时检测到它是一个旧结构,它应该将其结构更新为当前结构。(增加一栏)
我的应用程序使用核心数据。现在,随着新版本的发布,我需要更改数据库结构。我知道这是通过版本控制完成的,但我发现,所有教程都不适用于基于文档的应用程序,有时我会卡住。如何在基于文档的应用程序上实现版本控制,其中文档是数据库本身并且可以有任何名称?
谢谢
- -附加信息 - -
我需要做的是:打开应用程序,点击“打开”按钮,从文件系统中选择 NSManagedDocument。那是我的数据库(可以有任何名称),如果在打开它时检测到它是一个旧结构,它应该将其结构更新为当前结构。(增加一栏)
在我看来,您将 SQLite 存储包装到 an 中的事实NSManagedDocument
与模型版本控制过程无关。
只需在代码中添加持久存储选项并在 Xcode 中添加新模型版本即可。
在设置您的核心数据堆栈时 - 即在选择了带有数据库的文档之后 - 您必须在创建持久存储协调器时将这些选项添加到持久存储:
NSString * const NSMigratePersistentStoresAutomaticallyOption;
NSString * const NSInferMappingModelAutomaticallyOption;
正如这些选项的名称所暗示的那样,它应该从这里自动工作。实际的调用看起来像这样:
[persistentStoreCoordinator
addPersistentStoreWithType:NSSQLiteStoreType
configuration:@"Default"
URL:fileURL
options:@{NSMigratePersistentStoresAutomaticallyOption : @(YES),
NSInferMappingModelAutomaticallyOption : @(YES)}
error:&error];