Objective c 从通讯簿ID获取/生成vCard(.vtf文件)

Objective c 从通讯簿ID获取/生成vCard(.vtf文件),objective-c,abaddressbook,Objective C,Abaddressbook,我正在寻找一种使用通讯簿ID从联系人处生成/获取电子名片(vCard)的方法 我已经能够使用这个代码使用用户名来完成这项工作 ABAddressBookRef ab = ABAddressBookCreateWithOptions(NULL, nil); NSMutableDictionary *object = [_Contacts objectAtIndex:indexPath.row]; NSString *name = [object objectForKey:@"name"

我正在寻找一种使用通讯簿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);
错误消息

[\uu NSCFType objectEnumerator]:发送到实例的选择器无法识别 0x144E512802015-05-18 09:13:34.511电路板[6854:240618]*** 由于未捕获异常而终止应用程序 “NSInvalidArgumentException”,原因:“-[\uu NSCFType objectEnumerator]: 已将无法识别的选择器发送到实例0x144e51280'


您正在查找带有RecordId的地址BookGetPerson吗?然后,您可以只使用一个条目创建一个
CFArrayRef
,并将其传递给
abPersonCreateCardRepresentationwithPeople

ewan的意思是:

int32_t ID = [[selectedObject objectForKey:@"ABID"]intValue];
ABRecordRef contact = ABAddressBookGetPersonWithRecordID(ab,ID);
CFArrayRef array = CFArrayCreate(nil, &contact, 1, nil);
CFDataRef vcard = (CFDataRef)ABPersonCreateVCardRepresentationWithPeople(array);
仅仅转换一个值并不能生成数组。 你必须创建一个

以防万一我没弄明白:

请参见编辑1。您的回答很有道理,但出于某些原因,我得到了一个错误cfarrayref array=cfbridgerelease(@[(u桥id)contact]);给我一个错误。你的意思是把“数组”放在一个personCreateCardRepresentation中,而人们没有“联系”正确吗?根据需要编辑、检查和修复,但基本上就是这样-使用另一种方式。。这看起来更漂亮-无需浇铸;)