Нет, UIImage не соответствует протоколу NSCoding.
Чтобы сохранить изображение, преобразуйте его в NSData, используя UIImageJPEGRepresentation(image, quality)
или UIImagePNGRepresentation(image)
, а затем вы можете сохранить объект NSData в своем кодере, потому чтоон соответствует NSCoding.
Примерно так:
-(id)initWithCoder:(NSCoder *)aDecoder{
if ((self = [super init])){
title = [aDecoder decodeObjectForKey:@"Title"];
image = [UIImage imageWithData:[aDecoder decodeObjectForKey:@"ImageData"]];
}
return self;
}
-(void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:title forKey:@"Title"];
[aCoder encodeObject:UIImagePNGRepresentation(image) forKey:@"ImageData"];
}
PS, я полагаю, вы используете ARC?Если это не так, вам нужно сохранить значения в вашем методе initWithCoder, потому что decodeObjectForKey:
возвращает объект с автоматическим освобождением.Я также переписал ваш initWithCoder, чтобы включить обычную проверку super / nil, что является лучшей практикой.
Обратите внимание, что вы можете использовать self = [self init]
или self = [super initWithCoder:aDecoder]
вместо self = [super init]
, в зависимости от того, чтоВаш суперкласс и есть ли у вашего init какие-либо дополнительные настройки.