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

Objective c 基于文档的应用程序上的核心数据版本控制,objective-c,cocoa,core-data,structure,versioning,Objective C,Cocoa,Core Data,Structure,Versioning,我的应用程序使用核心数据。现在,随着新版本的发布,我需要更改数据库结构。 我知道这是通过版本控制实现的,但我发现,所有教程都不是针对基于文档的应用程序的,有时我会陷入困境。如何在基于文档的应用程序上实现版本控制,其中文档是数据库本身,可以有任何名称 谢谢 ---附加信息---- 我需要做的是:打开应用程序,点击“打开”按钮,从文件系统中选择NSManagedDocument。这是我的数据库(可以有任何名称),如果打开时检测到它是一个旧结构,它应该将其结构更新为当前结构。(添加了一列)在我看来,将

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

谢谢

---附加信息----


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

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

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

在设置核心数据堆栈时,即在选择带有DB的文档后,在创建持久存储协调器时,必须将以下选项添加到持久存储:

NSString * const NSMigratePersistentStoresAutomaticallyOption;
NSString * const NSInferMappingModelAutomaticallyOption;
正如这些选项的名称所暗示的,它应该从这里自动工作。实际的调用将如下所示:

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

你在哪里被击中的?或者,更准确地说,你被困在哪里了?在我发现的所有示例中,我都必须指出数据库的名称,但由于它是一个基于文档的应用程序,并且数据库是一个文件,所以它可以有任何名称。我还必须在appdelegate.m文件中添加持久存储选项,但在基于文档的应用程序中,我只有document.m文件。在那里粘贴选项代码不起作用,我得到了很多错误。这里很绿。谢谢,你的水平是这样的,这个网站将无法帮助你。你必须先了解你在做什么。最实用的建议是:放弃NSManagedDocument,只需遵循核心数据模板即可。感谢您的回答,感谢您花时间撰写本文。但我的应用程序已经编写好了,而它的制作方式需要将数据存储在这些文件中。而且,我仍然需要实现这个版本控制,所以也许你可以给我指出正确的方向。我很愿意学习,但正如你所说,我的水平很低。请在NSManagedDocument中显示核心数据sqlite存储的代码(通过编辑你的问题)。很抱歉回复太晚。。此代码需要在document.m文件或appdelegate.m文件中实现吗?我想是在doucment.m中,因为它必须为最终加载的每个文件执行。。对,对。如果这是您的设置,即为每个新文档创建一个新的SQLite数据库,为什么不呢?通常的方法是完全隐藏文档,并在应用程序委托中使用它来包装sqlite数据库,并让它存储所有内容(“所有文档”)。但您似乎打算对设置执行其他操作。是的,我的应用程序使用数据库文件。它的意思是这样的,因为用户可以把这些文件放在U盘上,然后把它移动到工作pc上。我会试着回去报到!谢谢我可能太蠢了,但我似乎无法使它起作用。我接受你的回答,所以至少有人能得到答案。。无论如何谢谢你!谢谢你的意见。如果时间允许,我将尝试制作一个示例项目进行演示,并与您分享。