Я выпустил приложение с базой данных Core Data sqlite.В новой версии моего приложения я создал новую «Model Version» моего xcdatamodel
в XCode.В новой версии сущность удалена, и некоторые новые атрибуты добавлены к одной из сущностей.
При обновлении до новой версии приложения я получаю эту ошибку sql:
Модель, используемая для открытия магазина, несовместима с моделью, используемой для создания магазина
Как можно устранить эту ошибку?Все данные в базе данных загружаются из Интернета, поэтому, возможно, самый простой способ - просто удалить текущий файл sqlite при возникновении этой ошибки и начать с нуля - но что делают люди, когда база данных содержит данные, которые не могут быть восстановлены?
РЕШЕНИЕ:
Я создал модель отображения в 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;
}