Я выпустил приложение с базой данных sqlite Core Data. В новой версии моего приложения я создал новую «модельную версию» моего xcdatamodel
в XCode. В новой версии объект удаляется, и некоторые новые атрибуты добавляются к одному из объектов.Основные данные: как обрабатывать новые версии?
При обновлении до новой версии приложения, я получаю эту ошибку SQL:
The model used to open the store is incompatible with the one used to create the store
Как я могу справиться с этой ошибкой? Все данные в базе данных загружаются из Интернета, поэтому, возможно, самый простой способ - просто удалить текущий SQL-файл при возникновении этой ошибки и начать с нуля - но что делают люди, когда база данных содержит данные, которые невозможно восстановить?
РЕШЕНИЕ:
Я создал модель отображения в Xcode и изменил мою persistentStoreCoordinator поглотитель для обработки словаря варианта для метода addPersistentStoreWithType:configuration:URL:options:error:
с ключом NSMigratePersistentStoresAutomaticallyOption
.
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (__persistentStoreCoordinator != nil)
{
return __persistentStoreCoordinator;
}
NSURL *cacheURL = [[[NSFileManager defaultManager] URLsForDirectory:NSCachesDirectory inDomains:NSUserDomainMask] lastObject];
NSURL *storeURL = [cacheURL URLByAppendingPathComponent:@"MyDatabase.sqlite"];
NSString *storePath = [storeURL path];
NSError *error = nil;
NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return __persistentStoreCoordinator;
}
Документация Apple о миграции также хорошо стоит прочитать - http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/Introduction.html. К сожалению, исходный вопрос звучит так, будто он выходит за рамки облегченного преобразования, которое Core Data может определить для себя, но материал модели сопоставления вполне уместен, даже если скриншоты не совсем актуальны. – Tommy
Абсолютно. :) Я предпочитаю хорошо написанные учебники для документации Apple, однако, как отправную точку, это правильное место! :) –