添加新模型版本后Coredata找不到模型

Posted

技术标签:

【中文标题】添加新模型版本后Coredata找不到模型【英文标题】:Coredata cannot find model after adding a new model version 【发布时间】:2014-04-09 16:13:14 【问题描述】:

一直在敲我的头。

我为我的数据库添加了一个新的模型版本以进行迁移并添加了一个新属性,但是当我运行应用程序而不删除它时,我得到了

找不到源存储的模型。我尝试调试并注意到无法创建持久存储。

我已经设置了所有迁移的东西,但我不知道为什么它不能创建持久存储。

错误似乎表明我的模型不存在,我尝试调试,我可以看到它已创建并且模型位于文档文件夹下。任何帮助将不胜感激。我也在使用restkit。

干杯。

【问题讨论】:

您是否选择了新模型版本作为 Xcode 中的当前版本? 是的,我确实选择了在模型编辑器中显示最后一个模型的模型版本。 【参考方案1】:

您需要删除以前不兼容的持久文件。下面的代码对我有用:

if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) 
            [[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil];
            [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error];

【讨论】:

这不会删除之前的数据库而不是迁移它吗?【参考方案2】:

如果您想在不删除数据库的情况下迁移数据库,并且只对模型进行少量更改(例如添加属性),请使用以下内容:

[_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                          configuration:nil
                                                    URL:storeURL
                                                options:@NSMigratePersistentStoresAutomaticallyOption: @(YES), NSInferMappingModelAutomaticallyOption: @(YES)
                                                  error:&error];

关键是选项NSMigratePersistentStoresAutomaticallyOptionNSInferMappingModelAutomaticallyOption

【讨论】:

以上是关于添加新模型版本后Coredata找不到模型的主要内容,如果未能解决你的问题,请参考以下文章

核心数据“找不到源存储模型”;

环回错误:找不到模型:书:当我使用命令创建新模型后尝试运行时

CoreData 在 OSX 框架包中找不到映射模型,但在 iOS 中可以正常工作

OSX CoreData:仅针对某些实体的问题:+entityForName:在此模型中找不到名为“myEntity”的实体

测试新模型时找不到 Eloquent 类

逆向工程核心数据数据库导致“找不到源存储模型”错误