質問

私はiPhoneアプリでaddressbook.frameworkを利用しています。contacts.appの共有機能の線に沿って何かを複製したいと思います。これは基本的に、特定の連絡先vcardを電子メールに添付します。私の知る限り、ドキュメントにはVCardを生成することに言及するものは何もありません。

これは自分で生成するケースですか?それとも私を助けることができる何かがありますか?

役に立ちましたか?

解決

デイブ・デロンの答えに完全に同意します。 VCardファイル(.VCF)を作成し、私が行った内容の電子メールアクションに添付したいだけなので、文字列、次に一時ファイルを作成したいので、データがすべてデータを持っていたすべてのVCardフィールドが作成されました。 。

私の場合、私は自分の中で方法を作成しました NSManagedObject 返品するサブクラスa -vCardRepresentation ストリング。

Objective -Cカテゴリまたはシンプルなフレームワークは非常に役立ちます - 私は時間があるときにそれをするかもしれません。

ウィキペディア ページと正式な仕様 vcard (3.0)本当に助けてくれます。

更新3: :iOS 5以降を使用している場合は、 ABPerson それは、与えられた人の記録のVCard表現を返すことができます:

CFDataRef ABPersonCreateVCardRepresentationWithPeople(CFArrayRef people);

更新2: :アプリを完成させるために急いでいますが、VCardデータを作成し、アプリ内のメールメッセージに添付ファイルとして追加したいので、現在は別のクラスコントローラーを作成しました。 Vcard構文。次に、vcard文字列のNSDATAバージョンを返すメソッドを添付して、添付ファイルとしてメールメッセージに直接追加します。これははるかにクリーンなソリューションです。一時的なファイルであっても、ファイルを作成する必要はありません。さらに、ファイルを作成して複数回使用してデータを再作成したい場合を除き、とにかくデータのnsString表現は本当に必要ありませんか?

私のコントローラークラスにはたくさんあります -setXXXX FN、TEL、ADRなどのVCARDフィールド名を持つキーが文字列である辞書に値を追加する方法。それから私がそれを呼ぶとき -vCardRepresentation, 、これにより、mfmailcomposeviewcontroller'sで直接使用できるNSDATAオブジェクト(辞書をスキャンすることで構築)を返します。 -AddattachmentData:MimeType:Filename: 方法。

コードを片付けることができれば、それは十分に一般的なものであれば、後で投稿します。

アップデート: :これが私のコードです、それは誰かが始めるのを助けるかもしれません:

- (NSString *)vCardRepresentation
{
  NSMutableArray *mutableArray = [[NSMutableArray alloc] init];

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

  [mutableArray addObject:[NSString stringWithFormat:@"FN:%@", self.name]];

  [mutableArray addObject:[NSString stringWithFormat:@"ADR:;;%@",
                           [self addressWithSeparator:@";"]]];

  if (self.phone != nil)
    [mutableArray addObject:[NSString stringWithFormat:@"TEL:%@", self.phone]];

  [mutableArray addObject:[NSString stringWithFormat:@"GEO:%g;%g",
                           self.latitudeValue, self.longitudeValue]];

  [mutableArray addObject:[NSString stringWithFormat:@"URL:http://%@",
                           self.website]];

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

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

  [mutableArray release];

  return string;
}

明らかに、私はクラスのプロパティに言及していることに加えて、 -addressWithSeparator アドレスのデータを構築するには、以下を含める必要があります。オプションのアドレスフィールドでもセパレーター。

他のヒント

これを行うために公開されたコードはないようです。 addressbook.frameworkのMacバージョンにはあります ABPersonCopyVCardRepresentation(), 、しかし、iPhoneに相当するものはありません。

おそらくあなたの最善の策は、既存のパーサー/ビルダーを取ることです(洋ナシなど ビルダーパーサー)そしてそれらをObjective-Cに変換します。

別のオプションは、独自のビルダーを書くことです。 Vカードの文法は難しいことではありません。

ここ VCardを生成するコードをダウンロードできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top