0

UIImageABRecordRefを自分のNSCoding適合クラスに保存しようとしています。私が知る限り、それUIImageNSCoding適合していないので、代わりに次の回避策を試しました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;
    }

このクラスのインスタンスを保存しようとすると、何らかの理由でプログラムがすぐにクラッシュします。私は何を間違っていましたか、またはより良いことをしましたか: どうすれば私がやりたいことを達成できますか? ありがとう!

4

1 に答える 1

1

[tempData release]問題は、デコーダーでの呼び出しにあると思います。私が見る限り、割り当てによる保持カウントがないため、解放してはならないオブジェクトを解放しています。それでも問題が解決しない場合は、クラッシュが発生する前にどのメソッドが呼び出されたかを確認するために、各メソッドにいくつかのログ ステートメントを設定します。これにより、どこに焦点を当てるかがより明確になります

于 2011-09-14T18:06:19.537 に答える