我从来没有遇到过Xcode3的任何问题,但是使用Xcode4,当我更新核心数据模型时,我的Apple代码在3中失败了大约1次,可怕的“持久存储迁移失败,缺少源管理对象模型”。错误。
这是我的设置(我如何将项目配置为自动迁移):
-(BOOL)configurePersistentStoreCoordinatorForURL:(NSURL *)url ofType:(NSString *)fileType modelConfiguration:(NSString *)configuration storeOptions:(NSDictionary *)storeOptions error:(NSError **)error
{
NSMutableDictionary *newOptions = nil;
if( storeOptions != nil )
newOptions = [NSMutableDictionary dictionaryWithDictionary:storeOptions];
else
newOptions = [NSMutableDictionary dictionary];
[newOptions setValue:@"YES" forKey:NSMigratePersistentStoresAutomaticallyOption];
[newOptions setValue:@"TRUE" forKey:NSInferMappingModelAutomaticallyOption];
BOOL success = FALSE;
success = [super configurePersistentStoreCoordinatorForURL:url ofType:fileType modelConfiguration:configuration storeOptions:newOptions error:error];
return success;
}
这是我一直在使用的过程(已经在Xcode4中解决了1个错误!)
除了,正如我所说,在3中大约2次这是正常的。一旦它工作一次,它(显然)很好 - 轻量级迁移完成,下一次保存保存在新模型版本中。
所以我猜测在上面的步骤中我做错了什么,但我已经完成了5到6次的文档并且看不到任何明显的东西。没有帮助NSPersistentDocument文档都已过时 - 但我已经在iPhone上进行了很多次轻量级迁移,所以我有理由这样做,这对我来说似乎是正确的。
我尝试/检查过的其他事情: - iPhone Core Data Lightweight Migration Cocoa error 134130: Can't find model for source store(禁止;仅包含根xcdatamodel)
答案 0 :(得分:3)
使用[NSNumber numberWithBool:YES]
而不是@"YES"
或@"TRUE"
。
答案 1 :(得分:0)
由于你已经淘汰了一个腐败的开发商店作为问题的根源,我怀疑问题出现在Xcode 4.x中,这至少可以说是错误的。很多人报告类似的问题,但没有两个问题看起来完全一样。这可能是一个只在特定数据模型设置中出现的错误,因此很难跟踪问题。
您可能只需放弃自动迁移并创建显式迁移地图。它需要更长的时间并且会在代码中引入复杂性,但它始终有效。
如果您有一个运送应用程序并且将在野外处理最终用户数据,那么您有道义和商业义务采取额外步骤来保护最终用户数据。
答案 2 :(得分:0)
我变得非常困惑但是这个,并且它没有工作..因为我假设该方法已经有一个“商店选项”字典..我只需要在我设置之前检查它的存在上述选择......
-(BOOL)configurePersistentStoreCoordinatorForURL: (NSURL*)u
ofType: (NSString*)t
modelConfiguration: (NSString*)c
storeOptions:(NSDictionary*)o
error: (NSError**)e
{
return [super configurePersistentStoreCoordinatorForURL:u
ofType:t
modelConfiguration:c
storeOptions:
o ? [o dictionaryWithValuesForKeys:
@[ NSMigratePersistentStoresAutomaticallyOption, @YES,
NSInferMappingModelAutomaticallyOption, @YES]]
: @{ NSMigratePersistentStoresAutomaticallyOption :@YES,
NSInferMappingModelAutomaticallyOption :@YES}
error:e];
}