如何在“NSCoder”中编码UIImage
我有一个“用户”对象,其中包含“UIImage”类的属性。
如何将图像与其他属性一起编码并将其保存在NSUserDefaults
?
我的理解是,我只能编码NSString
s?
例如,目前在我的代码中,我在编码/解码实现中添加了avatar_url
(string)。 如何将url转换为UIImage
然后进行编码?
- (void)encodeWithCoder:(NSCoder *)encoder { [encoder encodeObject:self.uid forKey:@"uid"]; [encoder encodeObject:self.avatar_url forKey:@"avatar_url"]; } - (id)initWithCoder:(NSCoder *)decoder { self = [super init]; if( self != nil ){ self.uid = [decoder decodeObjectForKey:@"uid"]; self.avatar_url = [decoder decodeObjectForKey:@"avatar_url"]; } }
UPDATE
正如在注释中指出的, UIImage
符合NSCoding
,所以你可以直接编码它,就像这样:
[encoder encodeObject:image forKey:@"image"];
这有一个好处,它应该存储图像的所有属性,包括scale
和imageOrientation
,如果它们没有被设置为默认值,这可能是非常重要的。
但是,您应该注意一些风险。 如果图像直接从应用程序包中加载,则存档将包含图像名称,但不包含图像数据。 如果存档包含图像数据,则它将采用PNG格式,而您可能更喜欢JPEG格式,具体取决于您正在编码的图像种类。
原版的
使用UIImagePNGRepresentation
或UIImageJPEGRepresentation
将UIImage
转换为NSData
,然后编码NSData
:
[encoder encodeObject:UIImagePNGRepresentation(self.image) forKey:@"image"];
稍后解码图像:
self.image = [UIImage imageWithData:[decoder decodeObjectForKey:@"image"]];