2

エクスポートには ABPersonCreateVCardRepresentationWithPeople メソッドを使用し、インポートには ABPersonCreatePeopleInSourceWithVCardRepresentation メソッドを使用して、デバイス間で連絡先データを正常に転送しました。ただし、連絡先の「メモ」フィールドのデータは転送されません。これが私のエクスポート機能です:

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

最後の行では、連絡先がエクスポートされる前にメモを持っていたとしても、メモは常に nil です。他のすべての標準的な連絡先フィールドは整っているようです。たとえば、最後の行を次のように置き換えると:

NSString *firstName = (__bridge NSString *)ABRecordCopyValue(personRecord, kABPersonFirstNameProperty);

firstName 文字列には、連絡先の名が保持されます。

これを回避し、連絡先メモを取得する方法はありますか?

ありがとう。

4

2 に答える 2

1

テスト目的で、アドレス帳から vCard をエクスポートできます。次に、それを TextEdit にドラッグして、さまざまなフィールドを確認します。

下部には、次のようなものがあります。

注:これはメモです!

また、vCard 形式に関する情報については、次のリンクを参照してください。

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

于 2012-08-28T04:25:36.553 に答える
0

ABPersonCreateVCardRepresentationWithPeopleは、vCardの重要な連絡先の詳細のみを転送します...これは、vCardとiOSのインポート/エクスポート機能を使用した多くのテストで識別されます。それには多くの間違いがあります。たとえば、Facebookなどのソーシャルネットワークでインポートしようとしても、インポートできません(他のスレッドTHREADLINKを見てください) 。

ただし、ABNewPersonViewControllerを介してvCard情報を追加しようとすると、完全に機能します。

于 2013-02-06T16:43:02.777 に答える