У меня проблемы с настройкой временного свойства в 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' ..» и т. Д. Однако, как я понимаю из документации, эти примитивные аксессоры / сеттеры создаются автоматически - похоже, это не так. Кто-нибудь может помочь мне решить эту проблему? Большое спасибо