4

アドレス帳の詳細を vcard 形式にインポートするアプリケーションがあります。これは私が行ったコードですが、私のメールアドレス、写真、組織名などが vcard に保存されないという問題があります。

    -(NSString*)vcardrepresentation
{


        NSMutableArray *mutableArray = [[NSMutableArray alloc] init];

        [mutableArray addObject:@"BEGIN:VCARD"];
        [mutableArray addObject:@"VERSION:3.0"];

        [mutableArray addObject:[NSString stringWithFormat:@"FN:%@ %@", self.contactlist.objContact.firstname,self.contactlist.objContact.lastname]];

        [mutableArray addObject:[NSString stringWithFormat:@"ORG:%@",self.contactlist.objContact.companyname]];
        [mutableArray addObject:[NSString stringWithFormat:@"ADR:%@",self.contactlist.objContact.City]];

        if ([phoneArray count]!=0)
            [mutableArray addObject:[NSString stringWithFormat:@"TEL:%@", phoneemail.phoneNumber]];

        if ([emailArray count]!=0)
        {
            [mutableArray addObject:[NSString stringWithFormat:@"EMAIL:%@",phoneemail.phoneNumber]];
        }
    if ([contactlist.objContact.Photo length]==0)
    {
        [mutableArray addObject:[NSString stringWithFormat:@"PHOTO:%@",[UIImage imageNamed:@"man.png"]]];
    }
    else
    {

        [mutableArray addObject:[NSString stringWithFormat:@"PHOTO:%@",[UIImage imageWithData:contactlist.objContact.Photo]]];
    }


        [mutableArray addObject:@"END:VCARD"];

        NSString *string = [mutableArray componentsJoinedByString:@"\n"];


        return string;

}

すべての連絡先データを vcard 形式で保存するにはどうすればよいですか?

4

2 に答える 2

1

ラニ、私は次の疑似コードを提案します:

  1. 連絡先の写真を NSData として取得 (contactlist.objContact.Photo)
  2. NSData バイトを BASE 64 エンコーディング スキームに変換します ( NSData から base64base64EncodedString )
  3. エンコードされたデータとプロパティを vCard に追加します。

[mutableArray addObject:[NSString stringWithFormat:@"PHOTO;ENCODING=BASE64;TYPE=JPEG:%@", data]];

参考までに、vCard の写真は Base 64 スキームでエンコードされた画像です。GIF や JPEG を含む 16 のサポートされているファイル形式があります。次に例を示します。

写真;エンコード=BASE64;タイプ=GIF:
    R0lGODdhfgA4AOYAAAAAAK+vr62trVIxa6WlpZ+fnzEpCEpzlAha/0Kc74+PjyGM
    SuecKRhrtX9/fzExORBSjCEYCGtra2NjYyF7nDGE50JrhAg51qWtOTl7vee1MWu1
    50o5e3PO/3sxcwAx/4R7GBgQOcDAwFoAQt61hJyMGHuUSpRKIf8A/wAY54yMjHtz
    ...
于 2012-12-27T15:31:34.497 に答える
1

(1)EMAILプロパティの値を電話番号に設定しているようです。

ADR(2)プロパティの形式が正しくありません。正しい形式は、セミコロンで区切られた個々のコンポーネントにアドレスを分割することです。形式は次のとおりです。

ADR:post-office-box;extended-address;street-address;city;state;zip-code;country

住所にコンポーネントがない場合 (たとえば、私書箱がない場合)、空の文字列を使用する必要があります。したがって、ADR値には常に 6 つのセミコロンを含める必要があります。

(3) セミコロン、カンマ、バックスラッシュ、および特に改行は、すべての vCard プロパティ値でエスケープする必要があります。セミコロンとコンマ文字は、一部のプロパティ ( や など) 内で特別な意味を持つADRためORG、これらの文字をこれらのプロパティでエスケープすることが特に重要です。文字はバックスラッシュで次のようにエスケープされます: \;, \,, .\\\n

(4)折り曲げにご注意ください。仕様では、1 行が 75 文字を超えてはならないことが推奨されています (改行を除く)。行がこの制限を超える場合は、改行を挿入し、行の先頭に少なくとも 1 つのタブまたはスペース文字を追加することで「折りたたむ」ことができます (@rjobidon の回答に示されているように)。

(5) vCard の正しい改行シーケンスは ではあり\r\nません\n

于 2012-12-27T21:55:06.567 に答える