Objective c 从通讯簿ID获取/生成vCard(.vtf文件)
我正在寻找一种使用通讯簿ID从联系人处生成/获取电子名片(vCard)的方法 我已经能够使用这个代码使用用户名来完成这项工作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"
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中,而人们没有“联系”正确吗?根据需要编辑、检查和修复,但基本上就是这样-使用另一种方式。。这看起来更漂亮-无需浇铸;)