【发布时间】:2015-05-18 00:16:28
【问题描述】:
我正在寻找一种方法来使用通讯录 ID 从联系人中生成/获取电子名片 (vCard)。
我已经能够使用此代码使用用户名来执行此操作
ABAddressBookRef ab = ABAddressBookCreateWithOptions(NULL, nil);
NSMutableDictionary *object = [_Contacts objectAtIndex:indexPath.row];
NSString *name = [object objectForKey:@"name"];
CFArrayRef contact = ABAddressBookCopyPeopleWithName(ab, (__bridge CFStringRef)(name));
CFDataRef vcard = (CFDataRef)ABPersonCreateVCardRepresentationWithPeople(contact);
唯一的问题是,当我有多个同名联系人时(不知道为什么会发生这种情况,但我确实这样做了)而不是获得一个(vCard)我得到多个 vCard,当我发送 vCard 而不是说“用户名字”上面写着电子名片。
我希望有一种方法可以更准确地使用地址簿 ID 来查找我要查找的卡。有没有办法做到这一点?
编辑 1 尝试此操作时出现错误。
int32_t ID = [[selectedObject objectForKey:@"ABID"]intValue];
CFArrayRef contact = ABAddressBookGetPersonWithRecordID(ab,ID);
CFDataRef vcard = (CFDataRef)ABPersonCreateVCardRepresentationWithPeople(contact);
错误信息
[__NSCFType objectEnumerator]: 无法识别的选择器发送到实例 0x144e51280 2015-05-18 09:13:34.511 板子[6854:240618] *** 由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'-[__NSCFType objectEnumerator]: 无法识别的选择器发送到实例 0x144e51280'
【问题讨论】: