У меня проблемы с настройкой временного свойства в Core Data. Проблема, которую я пытаюсь решить: у меня есть коллекция объектов, успешно сохраненных с использованием Core Data. Эта коллекция по сути является коллекцией только для чтения, но во время выполнения я хочу связать другой объект (в данном случае UIImage) с каждым элементом в коллекции. Мне не нужно хранить UIImages; это чисто ассоциация времени выполнения. Итак, что мне действительно нужно, так это «заполнитель» в каждом объекте в коллекции, куда я могу позже отбросить UIImage.
Переходный атрибут кажется правильным, и для этого справочные документы Core Data говорят мне, что я должен настроить «необязательный переходный атрибут типа undefined» в модели данных, которую я сделал:
Кроме того, он сообщает мне, что мне не нужно определять соответствующее свойство в объекте реализации, но мне придется написать собственные методы доступа и установки. Я смоделировал эти методы на основе примеров в документации следующим образом:
- (void)setDisplayImage:(UIImage *)anImage {
[self willChangeValueForKey:@"displayImage"];
[self setPrimitiveValue:anImage forKey:@"displayImage"];
[self didChangeValueForKey:@"displayImage"];
}
и:
- (UIImage *)displayImage {
[self willAccessValueForKey:@"displayImage"];
UIImage *anImage = [self primitiveDisplayImage];
[self didAccessValueForKey:@"displayImage"];
if (anImage == nil) {
NSData *displayImageData = [self displayImageData];
if (displayImageData != nil) {
anImage = [NSKeyedUnarchiver unarchiveObjectWithData:displayImageData];
[self setPrimitiveDisplayImage:anImage];
}
}
return anImage;
}
Существует также отложенный метод «записи» (willSave), который я написал для строгой полноты, хотя, как и выше, я никогда не буду записывать эти объекты обратно в хранилище.
Проблема, с которой я столкнулся, заключается в методах primitiveDisplayImage и setPrimitiveDisplayImage - (UIImage *) displayImage {. По сути, компилятор выдает предупреждения об этих двух методах, поскольку «объект X может не реагировать на 'primitiveDisplayImage' ..» и т. Д. Однако, как я понимаю из документации, эти примитивные средства доступа / установки создаются автоматически - это не похоже на дело. Кто-нибудь может помочь мне решить эту проблему? Большое спасибо