Переименованный 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:

Другие вопросы по тегам