我正在尝试在我的应用程序中使用自动轻量级迁移。我做了以下步骤:
- 创建新模型版本
- 编辑新模型版本
- 在创建persistentStoreCoordinator时设置nsmigratepersistentstoreautomaticyoption和nsinfermappingmodelautomaticyoption选项为YES。
- 设置当前版本为新版本
并得到错误:reason = "Can't find model for source store"
我试过Product->Clean,但没有效果。想法吗?
编辑:我忘了把模型的细节写进去。我有两个.xcdatamodel文件。第一个有两个实体,Event和Venue。第二个有一个实体EventDate。我不再在代码中使用第二个.xcdata模型,但我确实在项目中留下了该文件。我试图添加一个新的实体更新到第一个模型文件。
错误"Can't find model for source store"表示无法找到最初用于创建现有持久存储的.xcdatamodel文件。
假设你从这两个模型文件开始(版本号是应用程序的版本,而不是数据模型):
oneEntityModelv1.xcdatamodel
twoEntityModelv1.xcdatamodel
…,你想迁移到这个数据模型:
threeEntityModelv2.xcdatamodel
应用程序的v2版本必须包含所有三个文件才能进行迁移。
问题是我们使用了mergedModelFromBundles来实例化我们的模型。显然,这在自动轻量级迁移中并不适用。修复方法是
- 删除未使用的xcdatmodel。
- 删除数据库文件。
- 版本剩余模型。