我正在尝试在我自己的ABRecordRef
符合类中保存NSCoding
的UIImage。至于我现在可以告诉我,UIImage
不符合NSCoding
,所以我尝试使用NSData
代替以下解决方法:
- (id)initWithRecordRef:(ABRecordRef)record{
//Getting the image
if (ABPersonHasImageData(record)){
CFDataRef imageData = ABPersonCopyImageData(record);
image = [UIImage imageWithData:(NSData *) imageData];
CFRelease(imageData);
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder{
//encode NSData representation from UIImage
tempData = UIImagePNGRepresentation(image);
[aCoder encodeObject:tempData forKey:@"image"];
}
- (id)initWithCoder:(NSCoder *)aDecoder{
//image
tempData = [aDecoder decodeObjectForKey:@"image"];
image= [UIImage imageWithData:[tempData valueForKey:@"image"]];
[tempData release];
return self;
}
由于某种原因,程序崩溃很快,因为我试图保存这个类的实例。 我做错了什么,或者更好:我怎么能完成我想要的?谢谢!
答案 0 :(得分:1)
我认为问题可能是解码器中的[tempData release]
调用问题。据我所知,通过分配没有保留计数,所以它发布了一个不应该被释放的对象。如果这不起作用,我会在每个方法中设置几个日志语句,以查看在崩溃发生之前调用哪些语句。这将使我们更好地了解重点在哪里