2009-07-18 51 views
2

我使用ABUnknownPersonViewController來顯示聯繫人視圖。ABPersonSetImageData不顯示圖像

我試着與設置圖像:

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

它不工作,我不知道爲什麼。有任何想法嗎?

回答

5

您不能只將一個NSData對象投射到CFDataRef;在the docs指出,一個CFDataRef是一個「引用不可變CFData對象」,這是不一樣的NSData實例:

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;您使用CFRelease函數釋放核心基礎對象的所有權:

CFRelease(dr); 

這是類似於可可的內存管理,一旦核心基礎對象的擋計數達到零,將被釋放。

編輯:Stefan是完全正確的,在他的評論中,NSDataCFData也是免費電話橋接與可可觸摸與可可的iPhone,讓我原來的答覆是錯的。我的錯,應該在之前編輯過。

+0

謝謝Perspx。好的提示。我認爲Cocoa-Touch可以免費橋接(如Cocoa)。不過,我只是嘗試通過代碼片段創建一個新的CFDataRef。這是同一件事。奇怪的是,我從ABPersonSetImageData返回錯誤。 – Stefan 2009-07-18 15:13:05