0

每个人都知道我们可以创建一个地址簿(ABAddressBook),复制数组中的所有人,然后创建一个记录引用(ABRecordRef),然后使用NSData复制其图像数据,如下所示:

ABAddressBookRef addressBook = ABAddressBookCreate( );
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople( addressBook );
ABRecordRef recordReference = CFArrayGetValueAtIndex(allPeople, addressIndex);
NSData *imageData = (NSData *)ABPersonCopyImageData(recordReference);

现在这工作正常,正如预期的那样是一个普遍的事实,但在我的情况下(应用程序),我有一个小问题,如果用户最初保存联系人并且不添加/上传任何图像,那么当时,我们正在访问该联系人的图像数据,我们有空图像,因此我提供或分配默认图像。但是如果用户稍后为联系人上传图像或修改联系人的现有图像,这意味着更新的图像将没有按预期出现,因此我们不能依赖地址簿名称或某些索引等。

因此,我想出了一个保存唯一联系人 id 的想法,然后根据其 id 获取联系人图像。在此过程中,我已将唯一联系人 id 保存到数据库中,接下来,使用模型类保存 id 值,然后将该模型类保存到数组中。

这是用于理解的示例代码:

ReminderClass *reminderToDisplay = [self.remindersArray objectAtIndex:indexPath.row];
NSString *contactIDString = reminderToDisplay.contactID;
int addressIndex = [contactIDString integerValue];

现在我们知道我们可以有一个 ABRecordRef 的实例,从而复制它的图像数据,但我们知道它的语法是:

ABRecordRef personID = CFArrayGetValueAtIndex(CFArrayRef theArray, CFIndex idx);

任何方式我都可以分配addressIndex代替CFIndex idx

但我对数组部分感到震惊,即CFArrayRef,因为我有一个 NSMutableArray 保存所有 id 详细信息,即提醒数组

现在我搜索了从NSMutableArrayCFArrayRef的类型转换方法

但是发现了一些反之亦然的问题,可以在这里看到一个示例问题

如果有任何方法可以解决这个问题,请指导我,以便我可以访问相应联系人的正确图像,非常感谢任何帮助!

提前谢谢大家:)

4

1 回答 1

0

请从以下链接中找到 Mr.HRM 的最佳解决方案:

http://www.stackoverflow.com/questions/15138946/access-contact-image-from-address-book-based-on-name

这肯定会以正确的方式帮助您,谢谢:)

于 2013-03-12T11:27:15.560 回答