addassbook.frameworkからVcardを生成します
-
04-10-2019 - |
質問
私は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
アドレスのデータを構築するには、以下を含める必要があります。オプションのアドレスフィールドでもセパレーター。