ABPersonSetImageData不显示图像

时间:2009-07-18 14:38:06

标签: iphone cocoa-touch uikit addressbook

我使用ABUnknownPersonViewController来显示联系人视图。

我尝试使用以下方式设置图像:

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

它不起作用,我不知道为什么。有什么想法吗?

1 个答案:

答案 0 :(得分:5)

您不能只将NSData对象转换为CFDataRef;如the docs中所述,CFDataRef是“对不可变CFData对象的引用”,它与NSData实例不同:

typedef const struct __CFData *CFDataRef;

要从CFDataRef实例创建NSData,您需要使用CFDataCreate方法,传递字节和长度:

NSData *dataRef = UIImagePNGRepresentation([UIImage imageNamed:@"contact3.png"]); 
CFDataRef dr = CFDataCreate(NULL, [dataRef bytes], [dataRef length]);

另请注意,由于您自己创建了对象,因此您还必须按照Core Foundation Ownership Policy发布它;您使用CFRelease函数来释放Core Foundation对象的所有权:

CFRelease(dr);

这类似于Cocoa中的内存管理,一旦Core Foundation对象的保留计数达到零,它将被解除分配。

修改 Stefan在他的评论中完全正确,NSDataCFData也可通过Cocoa-Touch在iPhone上实现免费桥接和Cocoa一样,所以我原来的答案是错误的。我的错,应该先编辑过。