0

每次我为我的应用程序更改 Core Data 模型时,它都会在下次启动时生成一个不可恢复的错误:“用于打开商店的模型与用于创建商店的模型不兼容”。

我发现避免这种情况的唯一可靠方法是手动删除应用程序并让 Xcode 重新安装它,或者使用其他技术手动删除 Core Data 存储 .sqlite 存储文件。这显然不适合运送给用户。

Apple 用于初始化 NSPersistentStoreCoordinator 的默认 App Delegate 模板包括以下注释:

 __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
    /*
     TODO: Replace this implementation with code to handle the error appropriately.

     ...

     If you encounter schema incompatibility errors during development, you can reduce their frequency by:
     * Simply deleting the existing store:
     [[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil]

     * Performing automatic lightweight migration by passing the following dictionary as the options parameter: 
     [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

     */

不过,我还没有找到任何关于如何“正确处理错误”的示例或说明。

在这种情况下,我很乐意简单地删除数据库并让应用程序从在线数据中重新生成它。这就是我手动删除数据库时所做的事情。但是我怎样才能自动响应这个错误情况呢?

是否有任何解释最佳实践的好示例?

4

1 回答 1

1

最好的方法是使用轻量级迁移。请参阅 Apple 文档:http: //developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweightMigration.html

当您需要在新的应用程序版本中更改模型时,您会创建新模型。您在 Xcode 中执行此操作 - 只需选择您当前的模型并从菜单编辑器/添加模型版本中选择...没有这个,自动迁移将无法工作。

于 2012-05-06T22:28:00.053 回答