Getting/Generating 来自地址簿 ID 的 vCard(.vtf 文件)

Getting/Generating vCard (.vtf file) from Address Book ID

我正在寻找使用地址簿 ID 从联系人中generate/get电子名片 (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 而不是说"Users name"上面写着电子名片。

我希望有一种方法可以使用地址簿 ID 更准确地查找我正在寻找的卡片。有办法吗?

编辑 1 尝试此操作时出现错误。

int32_t ID = [[selectedObject objectForKey:@"ABID"]intValue];
CFArrayRef contact = ABAddressBookGetPersonWithRecordID(ab,ID);


CFDataRef vcard = (CFDataRef)ABPersonCreateVCardRepresentationWithPeople(contact);

错误信息

[__NSCFType objectEnumerator]: unrecognized selector sent to instance 0x144e51280 2015-05-18 09:13:34.511 theBoard[6854:240618] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFType objectEnumerator]: unrecognized selector sent to instance 0x144e51280'

您在寻找 ABAddressBookGetPersonWithRecordID 吗?然后,您可以只使用一个条目创建 CFArrayRef,并将其传递给 ABPersonCreateVCardRepresentationWithPeople

伊万的意思:

int32_t ID = [[selectedObject objectForKey:@"ABID"]intValue];
ABRecordRef contact = ABAddressBookGetPersonWithRecordID(ab,ID);
CFArrayRef array = CFArrayCreate(nil, &contact, 1, nil);
CFDataRef vcard = (CFDataRef)ABPersonCreateVCardRepresentationWithPeople(array);

仅仅转换一个值并不能构成一个数组。 你必须创建一个

以防万一我没听懂: