【问题标题】:Getting/Generating vCard (.vtf file) from Address Book ID从通讯簿 ID 获取/生成 vCard(.vtf 文件)
【发布时间】:2015-05-18 00:16:28
【问题描述】:

我正在寻找一种方法来使用通讯录 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 板子[6854:240618] *** 由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'-[__NSCFType objectEnumerator]: 无法识别的选择器发送到实例 0x144e51280'

【问题讨论】:

    标签: objective-c abaddressbook


    【解决方案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

    【讨论】:

    • CFArrayRef 数组 = CFBridgingRelease(@[(__bridge id)contact]);给我一个错误。你的意思是在 ABPersonCreateVCardRepresentationWithPeople 中放置“数组”而不是“联系人”对吗?
    • 根据需要进行了编辑、检查和修复,但基本上就是这样 - 使用可可的另一种方式.. 这看起来更好 - 更少的铸造;)
    【解决方案2】:

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

    【讨论】:

    • 请参阅编辑 1。您的回答很有道理,但由于某种原因我遇到了错误
    猜你喜欢
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    相关资源
    最近更新 更多