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);
仅仅转换一个值并不能构成一个数组。
你必须创建一个
以防万一我没听懂:
我正在寻找使用地址簿 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);
仅仅转换一个值并不能构成一个数组。 你必须创建一个
以防万一我没听懂: