2009-07-18 8 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 다음, 그것을 해제해야합니다; 당신은 코어 재단 개체의 소유권을 해제합니다 CFRelease 함수를 사용

CFRelease(dr); 

이것은 코코아의 메모리 관리와 유사하며, 코어 재단 개체의 유지 카운트가 0에 도달하면이 해제됩니다.

편집 :Stefan 그렇게 내 원래의 대답은 잘못, NSDataCFData는 무료 코코아와 코코아 터치와 아이폰에서 브리지 것으로, 자신의 의견에 완전히 옳았다. 내 잘못이야, 전에 편집 했어야 했어.

+0

감사합니다. 좋은 힌트. 나는 Cocoa-Touch에서 (코코아에서와 같이) 그들 사이의 수신자 부담 브리징이 될 것이라고 생각했습니다. 그럼에도 불구하고 귀하의 스 니펫에 의해 새로운 CFDataRef를 만들려고했습니다. 그건 같은거야. 이상하게도 ABPersonSetImageData에서 오류가 발생하지 않습니다. – Stefan

+0

알았어, 알아. 그것은 이미지였습니다. 그들 중 일부는 작동하지 않습니다. 도움 주셔서 감사합니다 – Stefan

+0

걱정하지 마세요. 고맙습니다. –

관련 문제