Core data 如何在不损坏Xcode4的情况下正确更新模型?
我在使用Xcode3时从来没有遇到过任何问题,但在使用Xcode4时,当我更新核心数据模型时,我发现苹果的代码在3次中失败了大约1次,出现了可怕的“持久存储迁移失败,缺少源管理对象模型”错误 以下是我的设置(我是如何将项目配置为自动迁移的):Core data 如何在不损坏Xcode4的情况下正确更新模型?,core-data,data-migration,nspersistentdocument,Core Data,Data Migration,Nspersistentdocument,我在使用Xcode3时从来没有遇到过任何问题,但在使用Xcode4时,当我更新核心数据模型时,我发现苹果的代码在3次中失败了大约1次,出现了可怕的“持久存储迁移失败,缺少源管理对象模型”错误 以下是我的设置(我是如何将项目配置为自动迁移的): NSPersistentDocument,来自苹果的模板 重写Apple的模型加载方法,我唯一要做的就是在storeOptions字典中提供两个标志,这将启用自动迁移 下面是我一直在使用的过程(已经解决了Xcode4中的1个bug!) 选择模型(在Xcod
我尝试/检查过的其他事项:
-(没有;只包括根xcdatamodel)既然您已经消除了一个损坏的开发存储作为问题的根源,我怀疑问题在于Xcode 4.x,至少可以说它有缺陷。很多人都在报告类似的问题,但没有两个问题看起来完全相同。这可能是一个只在特定数据模型设置中出现的bug,因此很难找到问题 您可能只需要放弃自动迁移并创建显式迁移映射。它需要更长的时间,并将复杂性引入到代码中,但它始终有效
如果您有一个配送应用程序,并且将在野外处理最终用户数据,那么您确实有道德和商业义务采取额外措施保护最终用户数据 使用
[NSNumber numberWithBool:YES]
而不是@“YES”
或@“TRUE”
我感到非常困惑,但这并没有起作用。。因为我假设该方法已经有了一个“存储选项”字典。。在设置上述选项之前,我只需要检查它是否存在
-(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];
}
崩溃是否产生任何错误?您是否尝试迁移开发版本?您是否反复使用存储的同一副本,还是每次都以新副本开始?只有“持久迁移失败错误”您如何迁移“新副本”存储?当然这是不可能的-没有什么可以迁移的?我想你可能是对的-在Xcode4处理CoreData的过程中有很多明显的错误。我只是希望有一些明显的我做错了的事情——这比不得不“希望并等待”苹果来修复要好得多。为什么会有什么不同呢?NSString的[boolValue]是内置的,其计算结果与您提供的代码完全相同。[NSNumber numberWithBool:x]不会对NSString调用boolValue,应为布尔值。它的评估结果总是正确的。例如,numberWithBool:@“否”理论上仍然是“是”(真)。
-(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];
}