如何在“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"]; 

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

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

原版的

使用UIImagePNGRepresentationUIImageJPEGRepresentationUIImage转换为NSData ,然后编码NSData

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

稍后解码图像:

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