使用iOS6 UIActivityViewController附加对象

使用iOS6 UIActivityViewController附加对象,ios6,sharing,Ios6,Sharing,我正在迁移到iOS6中使用UIActivityViewController进行共享,但我不知道如何创建通过电子邮件共享时要包含的电子邮件附件对象 iOS5中对应的代码为: MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; [picker addAttachmentData:data mimeType:@"application/XXX" fileName:fileName]; 据我

我正在迁移到iOS6中使用UIActivityViewController进行共享,但我不知道如何创建通过电子邮件共享时要包含的电子邮件附件对象

iOS5中对应的代码为:

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

据我所知,UIActivityViewController无法做到这一点——我甚至无法让它显示消息正文的HTML内容——因此您最好使用SLComposeViewController。

您对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];

如果有人想知道为什么他们的文件没有使用UIActivityViewController与DropBox等应用程序和其他通用文件处理应用程序共享,那么您真正想要的是UIDocumentInteractionController

可以这样使用它:

class ViewController {
    var openInController:UIDocumentInteractionController!

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

    func shareDoc {
        openInController.presentOptionsMenuFromRect(CGRectZero, inView: self.view, animated: true)
    }
}

这确实有效,谢谢markiv:)我将其与另一个关于如何为应用程序创建自定义文件(例如使用.myApp的文件)的指南结合起来,并使其与fileURL一起工作。很抱歉提出了这个老问题,但不应该
[数据写入URL:filePath原子化:是]
[数据写入URL:fileURL原子化:是]
?@GabrielePetronella Yes或我认为[data writeToFile:filePath Atomicaly:Yes]也可以。您好,如何使用网络文件?可以通过标记传递到活动项中的字符串来添加html内容…-只有这样它才会被解释为html。@SMSidat您确定吗?这正是我所做的,它是按字面意思呈现的(也就是说,不被解释为HTML),我很确定——我已经做到了,而且效果很好。我真的不想劫持这个问答线程,所以如果你已经有一个关于这个的,我很乐意帮助你,或者你可以用你的代码的相关部分的副本制作一个新的,我会看看我能做什么