iOS 7 UIActivityViewController邮件附件

5
我已经阅读了大量的帖子、在线教程/示例代码,但还是摸不着头脑。在我的应用程序中,我没有问题地显示了由iOS7本地提供的UIActivityController,并选择了适合我的应用程序的共享选项(AirDrop和邮件)。
我所遇到的具体问题是,在用户选择通过电子邮件共享选项时,如何将我的保存文档附加到电子邮件消息中。消息正文被设置为文本,但附件却不见了。相关代码如下:
// 生成要共享的XML文件,用于当前显示的记录… NSURL *url = [self createShareFile];
UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:@[@"Data shared from my app.", url] applicationActivities:nil];

// Filter out the sharing methods we're not interested in....
controller.excludedActivityTypes = @[UIActivityTypePostToTwitter, UIActivityTypePostToFacebook,
                                UIActivityTypePostToWeibo,
                                UIActivityTypeMessage,
                                UIActivityTypePrint, UIActivityTypeCopyToPasteboard,
                                UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll,
                                UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr,
                                UIActivityTypePostToVimeo, UIActivityTypePostToTencentWeibo];

// Now display the sharing view controller.
[self presentViewController:controller animated:YES completion:nil];

我错过了什么?我的文件已经被正确创建,内容也正确,并且NSURL对象包含文件的正确路径。

谢谢!

2个回答

6

问题已解决......

我在原帖中发布的代码完全准确。问题最终是出在我构建createShareFile方法返回的NSURL的方式上:

错误(原始方式):

return [NSURL URLWithString:[docFile stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

正确的方式:

return [NSURL fileURLWithPath:docFile];

我修复了那个问题,之后它就开始正常工作,甚至能够支持我的自定义文件类型。


您真是守护神!非常感谢您的分享,您救了我的一天! - Angel Naydenov

0

我曾经面临过类似的问题,邮件应用是唯一一个无法添加 PDF 的应用。以下是我的 Swift 代码以及处理 iPad 弹窗的方法。

var filesToShare = [Any]()
filesToShare.append(self.myUrl)

let activityViewController = UIActivityViewController(activityItems: filesToShare as [Any], applicationActivities: nil)
present(activityViewController, animated: true)

// for iPad -> where to present on screen
if let popOver = activityViewController.popoverPresentationController {
    //action button being my top left icon
    popOver.barButtonItem = self.actionButton
}

我的问题也在于以不同的方式处理URL


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接