编码/解码UIImage

时间:2011-08-02 15:02:28

标签: iphone objective-c sdk uiimage

我将一个Contacts对象数组写入这样的文件

[NSKeyedArchiver archiveRootObject:listOfContactsToLay toFile:[self fPath]];

Contact类实现相应的协议, 但它有一个UIImage字段,它不会编码或解码抛出编码异常。我该如何写UIImage字段?

3 个答案:

答案 0 :(得分:3)

简短解决方案

- (id)initWithCoder:(NSCoder *)decoder
{
    if ((self = [super init]))
    {
        NSData *data = [decoder decodeObjectForKey:@"UIImage"];
        self = [self initWithData:data];
    }

    return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder
{
    NSData *data = UIImagePNGRepresentation(self);
    [encoder encodeObject:data forKey:@"UIImage"];
}
@end

来源:http://iphonedevelopment.blogspot.com/2009/03/uiimage-and-nscoding.html

答案 1 :(得分:2)

您可以使用NSDataUIImagePNGRepresentation函数获取包含图像数据的PNG或JPEG表示的UIImageJPEGRepresentation对象。

答案 2 :(得分:0)

UIImage不符合encodeWithCoder,因此每次都会抛出异常。您可以将图像直接保存到用户默认值,但最好的方法是将图像保存到文档目录,然后保存图像文件的路径。如果图像是预渲染的,那显然很容易。如果它们是动态生成的(例如图像上下文等),那么你可以将它们转换为NSData:

NSData *imageData = UIImageJPEGRepresentation(myImage, CGFloat compressionQuality);
[imageData writeToFile:pathYouCreate atomically:YES];

然后将路径保存为NSKeyedArchiver中的属性。