通过内置vCard表示方法导出/导入时,不会传输联系人注释

时间:2012-06-27 12:56:15

标签: iphone objective-c abaddressbook vcard

使用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字符串将保存联系人的名字。

知道如何解决这个问题并获取联系人备注吗?

感谢。

2 个答案:

答案 0 :(得分:1)

出于测试目的,您可以从地址簿中导出vCard。然后将其拖到TextEdit以查看各个字段。

在底部你会发现类似的东西:

注意:这是一张便条!

此外,请参阅此链接以获取有关vCard格式的信息:

http://en.wikipedia.org/wiki/VCard

答案 1 :(得分:0)

ABPersonCreateVCardRepresentationWithPeople只会传输vCard的重要联系方式...这就是我在vCard和iOS导入导出功能的多次测试中的识别。它有很多错误,例如如果你尝试用像facebook这样的社交网络导入它,它就不会用它(只看我的其他帖子THREADLINK

但是如果你尝试通过ABNewPersonViewController添加一些vCard信息,它将完美地工作。