使用ABPersonCreateVCardRepresentationWithPeople方法导出,并使用ABPersonCreopleInSourceWithVCardRepresentation导入,我已成功传输设备之间的联系人数据。但是,联系人的“备注”字段中的数据不会被转移。 这是我的导出功能:
+(NSData*)exportContactsToVcard:(NSArray*)contacts
{
NSMutableArray *people = [NSMutableArray arrayWithCapacity:contacts.count];
ABAddressBookRef ab = ABAddressBookCreate();
for (Contact *contact in contacts)
{
ABRecordRef person = ABAddressBookGetPersonWithRecordID(ab,contact.contactId);
[people addObject:(__bridge id)person];
}
NSData *vCard = (__bridge NSData*)ABPersonCreateVCardRepresentationWithPeople((__bridge CFArrayRef) people);
return vCard;
}
和我的导入功能的一部分:
+(NSArray*)importContactsFromVcardData:(NSData*)vcardData
{
NSMutableArray *addedContactIds = [NSMutableArray array];
ABAddressBookRef addressBook = ABAddressBookCreate();
ABRecordRef defaultSource = ABAddressBookCopyDefaultSource(addressBook);
NSArray *createdPeople = (__bridge_transfer NSArray*)ABPersonCreatePeopleInSourceWithVCardRepresentation(defaultSource,(__bridge CFDataRef)vcardData);
CFErrorRef error = NULL;
for (id person in createdPeople)
{
error = NULL;
ABRecordRef personRecord = (__bridge ABRecordRef)person;
NSString *notes = (__bridge NSString *)ABRecordCopyValue(personRecord, kABPersonNoteProperty);
在最后一行中,注释总是为零,即使联系人在导出之前有注释也是如此。所有其他标准联系字段似乎都已到位。 例如,如果我用:
替换最后一行NSString *firstName = (__bridge NSString *)ABRecordCopyValue(personRecord, kABPersonFirstNameProperty);
firstName字符串将保存联系人的名字。
知道如何解决这个问题并获取联系人备注吗?
感谢。
答案 0 :(得分:1)
出于测试目的,您可以从地址簿中导出vCard。然后将其拖到TextEdit以查看各个字段。
在底部你会发现类似的东西:
注意:这是一张便条!
此外,请参阅此链接以获取有关vCard格式的信息:
答案 1 :(得分:0)
ABPersonCreateVCardRepresentationWithPeople只会传输vCard的重要联系方式...这就是我在vCard和iOS导入导出功能的多次测试中的识别。它有很多错误,例如如果你尝试用像facebook这样的社交网络导入它,它就不会用它(只看我的其他帖子THREADLINK)
但是如果你尝试通过ABNewPersonViewController添加一些vCard信息,它将完美地工作。