Ste*_*fan 2 iphone cocoa-touch uikit addressbook
我使用ABUnknownPersonViewController来显示联系人视图.
我尝试设置图像:
NSData *dataRef = UIImagePNGRepresentation([UIImage imageNamed:@"contact3.png"]);
ABPersonSetImageData(newPersonViewController.displayedPerson, (CFDataRef)dataRef, nil);
Run Code Online (Sandbox Code Playgroud)
它不起作用,我不知道为什么.有任何想法吗?
你不能只是将一个NSData物体投射到一个CFDataRef; 如文档中所述,a CFDataRef是"对不可变CFData对象的引用",它与NSData实例不同:
typedef const struct __CFData *CFDataRef;
Run Code Online (Sandbox Code Playgroud)
要创建CFDataRef从NSData实例中,您需要使用CFDataCreate方法,传递字节和长度:
NSData *dataRef = UIImagePNGRepresentation([UIImage imageNamed:@"contact3.png"]);
CFDataRef dr = CFDataCreate(NULL, [dataRef bytes], [dataRef length]);
Run Code Online (Sandbox Code Playgroud)
另请注意,由于您自己创建了对象,因此您还必须遵循Core Foundation Ownership Policy ; 您使用该CFRelease函数来释放Core Foundation对象的所有权:
CFRelease(dr);
Run Code Online (Sandbox Code Playgroud)
这类似于Cocoa中的内存管理,一旦Core Foundation对象的保留计数达到零,它将被释放.
编辑: Stefan完全正确,在他的评论中,NSData并且CFData在Cocoa-Touch和iPhone上使用Cocoa-Touch也是免费的,所以我原来的答案是错误的.我的错,应该先编辑过.
| 归档时间: |
|
| 查看次数: |
1471 次 |
| 最近记录: |