2012-09-28 3 views
8

私はiOS6で共有するためにUIActivityViewControllerを使用するように移行していますが、電子メールで共有するときに添付される電子メール添付オブジェクトを作成する方法を理解できません。iOS6を使用してオブジェクトを添付するUIActivityViewController

iOS5を、対応するコードは次のとおりです。

MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; 
[picker addAttachmentData:data mimeType:@"application/XXX" fileName:fileName]; 

答えて

24

あなたはUIActivityViewControllerのコントロールが非常に限られていますが、よく知られているMIMEタイプを付けている場合は、関連するファイル拡張子をファイルURLに指定することで正しく動作することがわかりました。あなたの添付ファイルがvCardのであれば、例えば、ファイルのURLに「の.vcf」の拡張子を使用:

NSString *docsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
// The file extension is important so that some mime magic happens! 
NSString *filePath = [docsPath stringByAppendingPathComponent:@"vcard.vcf"]; 
NSURL *fileUrl  = [NSURL fileURLWithPath:filePath]; 

[data writeToURL:fileUrl atomically:YES]; // save the file 

// Now pass the file URL in the activity items array 
UIActivityViewController *avc = [[UIActivityViewController alloc] initWithActivityItems: 
    @[@"Here's an attached vCard", fileUrl] applicationActivities:nil]; 
[vc presentModalViewController:avc animated:YES]; 
+0

これは実際に働いて、感謝の印:私はこれをアプリケーションのカスタムファイルを作成する方法(例えば.myAppを使用しているファイル)の別のガイドと組み合わせて、fileURLと同様に動作させました。 – Setomidor

+1

この古い質問を提出して申し訳ありませんが、[[data writeToURL:filePath atomically:YES] 'は[data writeToURL:fileURL atomically:YES]'ではありませんか? –

+0

@GabrielePetronellaはい、または[data writeToFile:filePath atomically:YES]と同様に動作します。 –

0

私はあなたがUIActivityViewControllerでこれを行うことはできません伝えることができるものから - 私もそれメッセージボディのために存在HTMLコンテンツにするために管理することはできません - SLComposeViewControllerを使う方が良いかもしれません。

+0

あなたがで活動項目に合格した文字列をタグ付けすることによって、HTMLコンテンツを追加することが可能です... - だけで、それをHTMLとして解釈されます。 – SMSidat

+0

@SMSidatあなたは本当ですか?それはまさに私がやったことであり、文字通り(つまりHTMLとして解釈されない) –

+0

私はかなり確信しています。私は本当にこのQ&Aスレッドを乗っ取りたいとは思っていません。もしあなたが既にこれを持っていれば、私はあなたを手伝ってくれるでしょうし、コードの関連部分のコピーを使って新しいものを作ることができます。私は何をすることができるかわかります – SMSidat

2

そのファイルはDropboxが、その他の一般的なファイルのようなアプリケーションにUIActivityViewControllerを使用して共有されていない理由を不思議誰のためにアプリケーションを処理するためには、本当に必要なのはUIDocumentInteractionControllerです。

このような何か、それを使用します。

class ViewController { 
    var openInController:UIDocumentInteractionController! 

    init() { 
     openInController = UIDocumentInteractionController(URL: docURL) 
    } 

    func shareDoc { 
     openInController.presentOptionsMenuFromRect(CGRectZero, inView: self.view, animated: true) 
    } 
} 
関連する問題