2010-11-03 4 views
3

Я использую базовый объект NSManagedObject (в приложении iOS) с атрибутом типа «transformable» для хранения фрагмента данных. Данные кодируются/декодируются с использованием встроенного преобразователя значений NSKeyedUnarchiveFromData. Проблема в том, что у меня возникли проблемы с правильной настройкой NSManagedObject после изменения двоичных данных. Скажем, к примеру, код выглядит следующим образом:Основные данные, не обновляющие преобразуемый атрибут

id temp = [myManagedObject myTransformableAttribute]; 

//.. do something with temp 

[myManagedObject setMyTransformableAttribute:temp]; 

NSError *error; 
if(![[myManagedObject managedObjectContext] save:&error]) { 
    //present error 
} 

Мне кажется, что «перезагрузка» преобразующееся атрибут на управляемом объект, а затем сохранить управляемый объект, должна привести к тому, чтобы данные были повторно закодированный с помощью трансформатора значения NSKeyedUnarchiveFromData. Но кодер никогда не вызывается, и обновленные данные не сохраняются.

Если вместо повторной установки исходных данных на управляемый объект я создаю копию измененных данных и устанавливаю , что на управляемый объект, то изменения распознаются. Возможно ли, что основные данные используют кешированную версию данных? Или что-то еще я здесь делаю неправильно? Спасибо ...

ответ

2

Кажется, вам необходимо переопределить класс инициализации метод в сущности подкласса NSManagedObject также для трансформатора (известная ошибка Core Data). После кода от расположения образца кода Apple, опробовано и работает: http://developer.apple.com/library/ios/#samplecode/Locations/Introduction/Intro.html

+ (void)initialize { 
    if (self == [Event class]) { 
     UIImageToDataTransformer *transformer = [[UIImageToDataTransformer alloc] init]; 
     [NSValueTransformer setValueTransformer:transformer forName:@"UIImageToDataTransformer"]; 
    } 
}