我正在寻找一种使用地址簿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 theBoard [6854:240618] *** 由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:' - [__ NSCFType objectEnumerator]: 无法识别的选择器发送到实例0x144e51280'
答案 0 :(得分:1)
您在寻找ABAddressBookGetPersonWithRecordID
吗?然后,您可以只使用一个条目制作CFArrayRef
,然后将其传递给ABPersonCreateVCardRepresentationWithPeople
。
答案 1 :(得分:1)
int32_t ID = [[selectedObject objectForKey:@"ABID"]intValue];
ABRecordRef contact = ABAddressBookGetPersonWithRecordID(ab,ID);
CFArrayRef array = CFArrayCreate(nil, &contact, 1, nil);
CFDataRef vcard = (CFDataRef)ABPersonCreateVCardRepresentationWithPeople(array);
只是输出一个值并不构成数组。 你必须创建一个
万一我没有得到它: Creating an immutable CFArray object - Apple sample doesn't work