我试图升级当前应用程序以使用具有专门子实体的抽象父实体。 我已经创建了一个自定义的NSEntityMigrationPolicy,并且在映射模型中我已将自定义策略设置为我的类的名称。从单个实体迁移到具有子实体的抽象父实体,NSEntityMigrationPolicy不叫
我初始化我的持久性存储这样的,这应该是相当标准:
NSError *error=nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
nil];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
NSLog(@"Error adding persistent store : %@",[error description]);
NSAssert(error==nil,[error localizedDescription]);
}
当我运行该应用程序,我得到以下错误:
终止应用程序未捕获 因异常 'NSInternalInconsistencyException', 原因:'该操作未能完成 。 (可可错误134140.)”
[错误USERINFO]包含‘原因=无法找到迁移映射模型’
我已经验证了数据模型的1版本将打开,如果我设置NSInferMappingModelAutomaticallyOption我得到一个迁移,虽然我的实体没有正确迁移(如预期)。
我已验证映射模型(cdm)位于应用程序包中,但不知何故它拒绝找到它。 我也在自定义迁移策略中设置了断点和NSLog()语句,并且它们都不运行,有或没有NSInferMappingModelAutomaticallyOption
有关为什么看起来无法找到映射模型的任何提示?
我得出了同样的结论检查数据库后由我的应用程序在模拟器上生成。无论如何,如果所有实体最终都在同一个表中,那么我可以更好地设计我的模式,这种方式甚至可以实现简单的迁移。 – 2011-03-09 15:37:40
虽然我的问题仍然没有回答(我已经在我的模式之后创建了几次迁移),但我将其标记为已解决。也许抽象的父实体对iOS应用程序来说有点矫枉过正。 – 2011-03-09 15:41:12
经过几天拉我的头发,这帮了我。我删除了我的映射策略和映射模型,并重新开始。马库斯是正确的,创建映射模型和定制政策应该是你最后做的事情。非常感谢。 – RyanM 2012-06-08 18:08:23