gpt4 book ai didi

swift - 如何将非托管 转换为 NSData?

转载 作者:搜寻专家 更新时间:2023-10-30 22:09:10 28 4
gpt4 key购买 nike

我需要将我的 Objective-C 转换为 Swift,以便从地址簿中获取联系人的图像。但是我从 CFDataNSData 的转换中遇到错误,我不知道如何让它工作。我该怎么做才能使这项工作正常进行?

在 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;

在 Swift 中:

var image: UIImage!

if ABPersonHasImageData(person) {
var imgData = (ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatOriginalSize))
image = UIImage.imageWithData(imgData) //Here get the error
}

最佳答案

正如在 Working with Cocoa Data Types ,您必须使用 takeUnretainedValue()takeRetainedValue() 将非托管对象转换为内存托管对象。在你的情况下

if (ABPersonHasImageData(person)) {
let imgData = ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatOriginalSize).takeRetainedValue()
let image = UIImage(data: imgData)
}

因为 ABPersonCopyImageDataWithFormat() 返回一个 (+1) 保留值。

关于swift - 如何将非托管 <CFData> 转换为 NSData?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25262542/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com