2014-11-25 198 views
0

我開發了一個iOS應用程序。該應用程序使用CoreData,我可能會在未來更新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

最簡單的方法是創建模型的新版本:當您已經做出的地方,你也可以在此改變peristentStoreCoordinator方法破壞數據庫,並在情況下重新創建

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

的極端糟糕的情況(用戶丟失了所有數據,但應用程序開始)通過添加下面的代碼(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(); 
}