从地址簿ID

时间:2015-05-18 00:16:28

标签: objective-c abaddressbook

我正在寻找一种使用地址簿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'

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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);

只是输出一个值并不构成数组。 你必须创建一个

万一我没有得到它: Creating an immutable CFArray object - Apple sample doesn't work