通过将NSCoding转换为NSData来保存UIImage文件

时间:2011-09-14 16:55:14

标签: iphone uiimage nsdata nscoding

我正在尝试在我自己的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;
    }

由于某种原因,程序崩溃很快,因为我试图保存这个类的实例。 我做错了什么,或者更好:我怎么能完成我想要的?谢谢!

1 个答案:

答案 0 :(得分:1)

我认为问题可能是解码器中的[tempData release]调用问题。据我所知,通过分配没有保留计数,所以它发布了一个不应该被释放的对象。如果这不起作用,我会在每个方法中设置几个日志语句,以查看在崩溃发生之前调用哪些语句。这将使我们更好地了解重点在哪里