如何在`NSCoder`中编码UIImage

时间:2011-11-01 03:40:15

标签: objective-c ios uiimage decode encode

我有一个'User'对象,其中包含'UIImage'类的属性。

如何将图像与其他属性一起编码并将其保存在NSUserDefaults

我的理解是我只能编码NSString s?

例如,目前在我的代码中,我在编码/解码实现中添加avatar_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"];
    }
}

1 个答案:

答案 0 :(得分:27)

更新

正如评论中指出的,UIImage符合NSCoding,因此您可以直接对其进行编码,如下所示:

[encoder encodeObject:image forKey:@"image"];

这样做的好处是它(应该)存储图像的所有属性,包括scaleimageOrientation,如果它们没有设置为默认值,这可能非常重要。

但是,它确实存在一些您应该注意的风险。如果图片是直接从您的应用套装中加载的,则归档将包含图片名称,但图像数据。如果存档包含图像数据,它将采用PNG格式,而您可能更喜欢JPEG格式,具体取决于您编码的图像类型。

ORIGINAL

使用UIImagePNGRepresentationUIImageJPEGRepresentationUIImage转换为NSData,然后对NSData进行编码:

[encoder encodeObject:UIImagePNGRepresentation(self.image) forKey:@"image"];

稍后解码图像:

self.image = [UIImage imageWithData:[decoder decodeObjectForKey:@"image"]];