根据通讯簿的id访问联系人图像



每个人都知道,我们可以创建一个地址簿(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分配到CFIndexidx的位置

但我对数组部分感到震惊,即CFArrayRef,因为我有一个NSMutableArray,其中包含所有id详细信息,即
remindersArray

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

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

如果有任何方法可以克服这一点,请指导我,这样我就可以获得相应联系人的适当图像,非常感谢任何帮助!

提前感谢:)

请HRM先生从以下链接中找到最佳解决方案:

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

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

最新更新