我有一个使用 core-data 的可可应用程序,它现在是其托管对象模型的第 4 版。
我的托管对象模型包含抽象实体,但到目前为止,我已经设法通过创建适当的映射模型并使用 addPersistentStoreWithType:configuration:options:error 并将 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 )它不会被调用。
我几乎不知道从哪里开始。任何有助于调试此问题的想法将不胜感激。