2009-07-18 9 views
2

私はABUnknownPersonViewControllerを使用して連絡先ビューを表示します。ABPersonSetImageDataは画像を表示しません

NSData *dataRef = UIImagePNGRepresentation([UIImage imageNamed:@"contact3.png"]); 
ABPersonSetImageData(newPersonViewController.displayedPerson, (CFDataRef)dataRef, nil); 

それが動作しないと私は理由を知らない:

は私がして画像を設定してみてください。何か案は?

答えて

5

NSDataオブジェクトをCFDataRefにキャストすることはできません。 the docsに述べたように、CFDataRefNSDataインスタンスと同じではありません、「不変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のオブジェクトの保持カウントがゼロに達すると、それが割り当て解除されます。

編集:StefanNSDataCFDataもフリーダイヤルココアのようにココアタッチとiPhone上でブリッジされていることを、彼のコメントで、完全に正しかったので、私のオリジナルの答えは間違っていました。私のせいで、前にそれを編集していたはずです。

+0

ありがとうPerspx。良いヒント。私はCocoa-Touchで(Cocoaのように)彼らの間のフリーダイヤルの架設であると考えました。それにもかかわらず、あなたのスニペットで新しくCFDataRefを作成しようとしました。それは同じことです。奇妙なことに、私はABPersonSetImageDataからエラーを返さない。 – Stefan

+0

さて、私はそれを持っています。それはイメージだった。それらのうちのいくつかは動作しません。あなたの助けをありがとう – Stefan

+0

心配しないで - それをうまく固定しました。 –

関連する問題