【问题标题】:How to encode a UIImage in an `NSCoder`如何在“NSCoder”中编码 UIImage
【发布时间】:2011-11-01 03:40:15
【问题描述】:

我有一个包含“UIImage”类属性的“用户”对象。

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

我的理解是我只能编码NSStrings?

例如,目前在我的代码中,我在编码/解码实现中添加了avatar_url(字符串)。如何将 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"];
    }
}

【问题讨论】:

    标签: objective-c ios uiimage decode encode


    【解决方案1】:

    更新

    正如 cmets 中所指出的,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"]];
    

    【讨论】:

    • 这不是必须的。 UIImage 符合 NSSecureCoding,继承自 NSCoding,所以可以直接对 UIImage 进行编码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多