2009-07-18 65 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