2014-11-25 4 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

Самый простой способ заключается в создании новой версии модели:

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

После того как вы сделать это на месте, вы можете также overide метод peristentStoreCoordinator уничтожить базу данных и восстановить его в случае (пользователь потерял все свои данные, но начало приложения), добавив код ниже (objc) вместо того, чтобы просто прервать его, он уничтожит базу данных и создаст пустую. Это может быть полезно в dev, это должно быть защитой в 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(); 
} 
Смежные вопросы