CoreData可防止更新崩溃

时间:2014-11-25 11:38:02

标签: ios core-data

我开发了一个iOS应用程序。该应用程序使用CoreData,我可能会在将来更新CoreData上的内容。

我知道如果CoreData发生任何更改,应用程序会因为更改而崩溃(在具有旧版本的设备上),并且会在AppDelegate处理。

为了让应用程序不崩溃我相信我需要对以下方法进行一些更改:

func saveContext ()
lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator?

这些方法使用以下注释行调用abort()函数(默认情况下):

// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.

在发布应用程序之前,我应该怎么做,以免在下次更新时崩溃?

1 个答案:

答案 0 :(得分:1)

最简单的方法是创建模型的新版本:

http://www.raywenderlich.com/27657/how-to-perform-a-lightweight-core-data-migration

在你完成这个之后你还可以覆盖peristentStoreCoordinator方法来销毁数据库,并在极端恶劣的情况下重新创建它(用户丢失了所有数据,但应用程序启动),方法是添加下面的代码(objc) )而不是只是中止它将破坏数据库,并创建一个空数据库。它在开发中很有用,应该是prod的保护,但你的代码永远不应该去那里。

//delete the store
[[NSFileManager defaultManager] removeItemAtPath:storePath error:nil];
// recreate the store
if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}