每个人都知道我们可以创建一个地址簿(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 详细信息,即提醒数组
现在我搜索了从NSMutableArray到CFArrayRef的类型转换方法
但是发现了一些反之亦然的问题,可以在这里看到一个示例问题
如果有任何方法可以解决这个问题,请指导我,以便我可以访问相应联系人的正确图像,非常感谢任何帮助!
提前谢谢大家:)