我需要将Objective-C转换为Swift以从通讯簿中获取联系人的图像.但是,我得到一个错误与投从CFData到NSData,我不知道如何使这项工作.我该怎么做才能使这项工作正常进行?
在Objective-C中:
ABRecordID contactID = ABRecordGetRecordID(contactRef);
ABAddressBookRef addressBook = ABAddressBookCreate();
ABRecordRef origContactRef = ABAddressBookGetPersonWithRecordID(addressBook, contactID);
if (ABPersonHasImageData(origContactRef)) {
NSData *imgData = (NSData*)ABPersonCopyImageDataWithFormat(origContactRef, kABPersonImageFormatOriginalSize);
img = [UIImage imageWithData: imgData];
[imgData release];
}
CFRelease(addressBook);
return img;
Run Code Online (Sandbox Code Playgroud)
在Swift中:
var image: UIImage!
if ABPersonHasImageData(person) {
var imgData = (ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatOriginalSize))
image = UIImage.imageWithData(imgData) //Here get the error
}
Run Code Online (Sandbox Code Playgroud)
如
使用Cocoa数据类型中所述,您必须使用takeUnretainedValue()或将非托管对象转换为内存管理对象takeRetainedValue().在你的情况下
if (ABPersonHasImageData(person)) {
let imgData = ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatOriginalSize).takeRetainedValue()
let image = UIImage(data: imgData)
}
Run Code Online (Sandbox Code Playgroud)
因为ABPersonCopyImageDataWithFormat()返回一个(+1)保留值.
| 归档时间: |
|
| 查看次数: |
3927 次 |
| 最近记录: |