根据地址簿从地址簿访问联系人图像

时间:2012-07-20 07:10:42

标签: iphone image contact abaddressbook

由于每个人都知道我们可以创建一个地址簿(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);

我可以在 CFIndex idx

的位置分配 addressIndex

但我对数组部分感到震惊,即。 CFArrayRef ,因为我有一个NSMutableArray包含所有id细节,即。的 remindersArray

现在我搜索了从 NSMutableArray CFArrayRef

的类型转换方法

但是反过来发现了几个问题,可以在here

上看到一个示例问题

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

提前感谢所有人:)

1 个答案:

答案 0 :(得分:0)

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

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

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