
我的托管对象模型包含抽象实体,但到目前为止,我已经设法通过创建适当的映射模型并使用addPersistentStoreWithType:configuration:options:错误并将NSMigratePersistentStoresautomaticallyOption设置为YES来创建我的持久存储来实现迁移.
NSDictionary *optionsDictionary = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresautomaticallyOption];NSURL *url = [NSURL fileURLWithPath: [applicationSupportFolder stringByAppendingPathComponent: @"MyApp.xml"]];NSError *error=nil;[theCoordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:optionsDictionary error:&error]
当我从模型版本3迁移到4时,这是一个很好的工作,这是一个涉及向多个实体添加属性的迁移.现在,当我尝试添加一个新的模型版本(版本5)时,对addPersistentStoreWithType的调用返回nil,错误仍然为空.从4到5的迁移涉及添加单个属性.
我正在努力调试问题,并检查了以下所有内容;
>源数据库实际上是在版本4,而persistentStoreCoordinator的托管对象模型是版本5.
> 4> 5映射模型以及版本4和5的托管对象模型存在于我构建的应用程序的资源文件夹中.
>我尝试过各种型号的升级路径.奇怪的是,我发现从早期版本3升级到> 5件作品..但从4升级> 5失败.
>我已经尝试添加自定义实体迁移策略来迁移其属性正在更改的实体…在这种情况下,我会覆盖方法beginEntityMapPing:manager:error:.有趣的是,当迁移工作时(即当我从3迁移到4,或从3迁移到5时),这种方法确实被调用,但是在失败的情况下不会被调用(4到5).
我在哪里继续下去,我都感到失落.任何有助于调试此问题的想法将不胜感激.
解决方法 我在这里回答我自己的问题,以防它有助于某人.关键的问题是,当我达到我的对象模型的第4版时,我还向项目添加了一个额外的托管对象模型.这个额外的模型与我的主模型是分开的,仅用于在另一个线程上创建缓存,并包含与主模型无关的数据.
愚蠢地,我仍然使用我的managedobjectModel来初始化
managedobjectModel = [[NSManagedobjectModel mergedModelFromBundles:nil] retain]
这在我的案例中创建了一个包含我的主模型以及其他模型的实体的模型.这些不必要的实体在我的数据库中具有版本散列.当核心数据然后去寻找一个与所有这些哈希值匹配的managedobjectmodel时,它自然找不到它.
在我的情况下,解决方案是在迁移之前手动清除我的数据库文件(从不需要的实体中删除版本)..然后将我的managedobjectModel加载代码更改为;
Nsstring *path = [[NSBundle mainBundle] pathForResource:@"MyDataModel" ofType:@"momd"];NSURL *momURL = [NSURL fileURLWithPath:path];managedobjectModel = [[NSManagedobjectModel alloc] initWithContentsOfURL:momURL];总结
以上是内存溢出为你收集整理的可可 – 核心数据迁移失败与“找不到源存储模型”,但managedObjectModel源代码存在全部内容,希望文章能够帮你解决可可 – 核心数据迁移失败与“找不到源存储模型”,但managedObjectModel源代码存在所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)