14

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

これは自分で生成する場合ですか?それとも私を助けることができる何か利用できるものはありますか?

4

3 に答える 3

18

Dave DeLongの答えに完全に同意します。単に vCard ファイル (.vcf) を作成し、それをアプリ内メール アクションに添付したかったので、それを追加したいだけです。 .

私の場合、NSManagedObjectサブクラスに文字列を返すメソッドを作成しました-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 フィールド名を持つ文字列であるディクショナリに値を追加する多くのメソッドがあります。次に、その を呼び出すと、MFMailComposeViewController の-addAttachmentData:mimeType:fileName:メソッド-vCardRepresentationで直接使用できる NSData オブジェクト (辞書をスキャンして作成) が返されます。

コードを整理できれば、それで十分に一般的なので、後で投稿します。

更新:これが私のコードです。誰かが始めるのに役立つかもしれません:

- (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、アドレスのデータを構築するために呼び出されるメソッドを参照しています。これには ; を含める必要があります。オプションの住所フィールドの場合でもセパレーター。

于 2010-06-08T10:01:47.073 に答える
6

これを行うために公に投稿されたコードはないようです。Mac バージョンの AddressBook.frameworkにはABPersonCopyVCardRepresentation()がありますが、iPhone には同等のものはありません。

おそらく最善の策は、既存のパーサー/ビルダー (PEARビルダーパーサーなど) を使用して、それらを Objective-C に変換することです。

もう 1 つのオプションは、独自のビルダーを作成することです。vCard の文法は難しいものではありません。

于 2010-05-08T21:39:40.830 に答える
5

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

于 2011-01-21T13:50:28.323 に答える