Переименованный Core Data Transformable
Я использую CoreData
управлять моим автономным хранилищем в моем приложении. Данные автономного хранилища сохраняются в пользовательском NSObject
в качестве трансформируемого в xcdatamodel
,
Моя текущая версия в приложении (v1.0) хранит Navigation
учебный класс.
Мне нужно было переименовать Navigation
класс, чтобы бороться с некоторыми проблемами пространства имен в другой цели моей базы кода.
В версии 2.0 происходит сбой приложения, потому что при поиске CoreData
хранить NSKeyedUnarchiver
терпит неудачу из-за отсутствия Navigation
учебный класс.
Каков наилучший подход к переносу моего текущего CoreData
магазин для борьбы с этим вопросом?
Я попробовал что-то вроде этого:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"OfflineStorage"];
request.fetchLimit = 1;
request.predicate = [NSPredicate predicateWithFormat:@"storageID = 1"];
NSError *error;
NSArray *result;
@try {
result = [context executeFetchRequest:request error:&error];
}
@catch (NSException *exception) {
if([exception.name isEqualToString:NSInvalidUnarchiveOperationException]) {
NSFetchRequest *deleteRequest = [request copy];
deleteRequest.resultType = NSManagedObjectIDResultType;
deleteRequest.includesPropertyValues = NO;
deleteRequest.propertiesToFetch = @[];
NSArray *deleteResult = [context executeFetchRequest:request error:&error];
if(deleteResult.count) {
[context performBlockAndWait:^{
[context deleteObject:deleteResult.firstObject];
[context save:nil];
}];
}
}
}
Я подумал, что было бы разумно поймать исключение и попытаться только получить ObjectID, чтобы удалить поврежденные данные в моем магазине. Но это не работает...
1 ответ
Вы добавили новую версию в свою модель, где вы также переименовали этот трансформируемый класс?
Вы пытались сделать собственную миграцию и переименовать трансформатор для трансформируемого?
Вот некоторая документация: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/Introduction.html
Я сам этого пока не делал. Поскольку авто-миграции мне хватило уже сейчас.
Обновить
Извините, я неправильно понял ваш вопрос.
Трансформируемый трансформируется вашим собственным значением трансформатора? Если это так, вы можете использовать это в NSKeyedUnarchiver
заменить класс старым именем новым классом: https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSKeyedUnarchiver_Class/index.html: