NSData
オブジェクトをCFDataRef
にキャストすることはできません。 the docsに述べたように、CFDataRef
がNSData
インスタンスと同じではありません、「不変CFDataオブジェクトへの参照」である:
typedef const struct __CFData *CFDataRef;
NSData
インスタンスからCFDataRef
を作成するには、CFDataCreate
を使用する必要がありますこの方法は、バイト、長さ渡し:あなたがオブジェクトを自分で作成するため、また、その
NSData *dataRef = UIImagePNGRepresentation([UIImage imageNamed:@"contact3.png"]);
CFDataRef dr = CFDataCreate(NULL, [dataRef bytes], [dataRef length]);
注意することは、あなたもCore Foundation Ownership Policy以下、それを解放する必要があります。あなたは、Core Foundationのオブジェクトの所有権を解放するCFRelease
機能を使用します。
CFRelease(dr);
これはココアのメモリ管理と同様であり、Core Foundationのオブジェクトの保持カウントがゼロに達すると、それが割り当て解除されます。
編集:Stefan
はNSData
とCFData
もフリーダイヤルココアのようにココアタッチとiPhone上でブリッジされていることを、彼のコメントで、完全に正しかったので、私のオリジナルの答えは間違っていました。私のせいで、前にそれを編集していたはずです。
ありがとうPerspx。良いヒント。私はCocoa-Touchで(Cocoaのように)彼らの間のフリーダイヤルの架設であると考えました。それにもかかわらず、あなたのスニペットで新しくCFDataRefを作成しようとしました。それは同じことです。奇妙なことに、私はABPersonSetImageDataからエラーを返さない。 – Stefan
さて、私はそれを持っています。それはイメージだった。それらのうちのいくつかは動作しません。あなたの助けをありがとう – Stefan
心配しないで - それをうまく固定しました。 –