我使用ABUnknownPersonViewController来显示联系人视图。
我尝试使用以下方式设置图像:
NSData *dataRef = UIImagePNGRepresentation([UIImage imageNamed:@"contact3.png"]);
ABPersonSetImageData(newPersonViewController.displayedPerson, (CFDataRef)dataRef, nil);
它不起作用,我不知道为什么。有什么想法吗?
答案 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
在他的评论中完全正确,NSData
和CFData
也可通过Cocoa-Touch在iPhone上实现免费桥接和Cocoa一样,所以我原来的答案是错误的。我的错,应该先编辑过。