У меня была такая же проблема, поэтому я нашел обходной путь. Подкласс NSManagedObject
и преобразование UIImage
вручную путем переопределения методов доступа для свойства изображения.
- В методе сеттера преобразуйте объект
UIImage
в экземпляр NSData
, а затем установите свойство изображения управляемого объекта.
- В методе получения преобразуйте данные свойства изображения и верните экземпляр
UIImage
.
Давайте приступим к работе:
В модели данных при нажатии атрибута «изображение» удалите текст Value Transformer Name . По умолчанию NSKeyedUnarchiveFromData , что вам и нужно.
Затем создайте подкласс сущности, щелкнув ее в модели данных, и нажмите Новый файл . Когда вы выберете сущность, вы увидите новый класс в Touch Classes класса какао под названием «Класс управляемых объектов». Нажмите Далее , оставьте местоположение файла как есть, снова нажав Далее , а затем поставьте галочку рядом со всеми объектами, которые вы хотите создать подклассом.
В файле реализации вашего подкласса NSManagedObject
переопределите методы доступа свойства изображения, включив следующие два:
- (void)setImage:(UIImage *)image {
[self willChangeValueForKey:@"image"];
NSData *data = UIImagePNGRepresentation(image);
[self setPrimitiveValue:data forKey:@"image"];
[self didChangeValueForKey:@"image"];
}
- (UIImage *)image {
[self willAccessValueForKey:@"image"];
UIImage *image = [UIImage imageWithData:[self primitiveValueForKey:@"image"]];
[self didAccessValueForKey:@"image"];
return image;
}
Затем, всякий раз, когда вы устанавливаете изображение, используйте:
object.image = [UIImage imageNamed:@"icon.png"];
вместо:
[object setValue:[UIImage imageNamed:@"icon.png"] forKey:@"image"];
Всякий раз, когда вы получаете изображение, используйте:
UIImage *myImage = object.image;
вместо:
UIImage *myImage = [object valueForKey:@"image"];