我将一个Contacts对象数组写入这样的文件
[NSKeyedArchiver archiveRootObject:listOfContactsToLay toFile:[self fPath]];
Contact类实现相应的协议,
但它有一个UIImage字段,它不会编码或解码抛出编码异常。我该如何写UIImage
字段?
答案 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)
您可以使用NSData
和UIImagePNGRepresentation
函数获取包含图像数据的PNG或JPEG表示的UIImageJPEGRepresentation
对象。
答案 2 :(得分:0)
UIImage不符合encodeWithCoder,因此每次都会抛出异常。您可以将图像直接保存到用户默认值,但最好的方法是将图像保存到文档目录,然后保存图像文件的路径。如果图像是预渲染的,那显然很容易。如果它们是动态生成的(例如图像上下文等),那么你可以将它们转换为NSData:
NSData *imageData = UIImageJPEGRepresentation(myImage, CGFloat compressionQuality);
[imageData writeToFile:pathYouCreate atomically:YES];
然后将路径保存为NSKeyedArchiver中的属性。