将.mov附加到MFMailComposeViewController

时间:2015-06-05 14:34:36

标签: ios objective-c email email-attachments mfmailcomposeviewcontroller

我想通过电子邮件发送.mov文件。所以我使用的是MFMailComposeViewController。花了一些时间进行搜索后,我终于写了下面的代码。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *myPathDocs =  [documentsDirectory stringByAppendingPathComponent:
                                     [NSString stringWithFormat:@"/Saved Video/%@",[player.contentURL lastPathComponent]]];
MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init];
mail.mailComposeDelegate = self;
[mail addAttachmentData:[NSData dataWithContentsOfURL:[NSURL URLWithString:myPathDocs]] mimeType:@"video/quicktime" fileName:[myPathDocs lastPathComponent]];
[mail setSubject:@"Share VIDEO by My App"];
[self presentViewController:mail animated:YES completion:nil]; 

当邮件编辑器出现时,我可以在邮件正文中看到附件,但是我收到了这封邮件而没有附件。我错过了什么吗?或做错了什么?

请帮帮我。

1 个答案:

答案 0 :(得分:4)

您无法正确获取文件的数据。

第一步是拆分代码,使其更易读,更容易调试。拆分这一行:

[mail addAttachmentData:[NSData dataWithContentsOfURL:[NSURL URLWithString:myPathDocs]] mimeType:@"video/quicktime" fileName:[myPathDocs lastPathComponent]];

进入这些:

NSURL *fileURL = [NSURL URLWithString:myPathDocs];
NSData *fileData = [NSData dataWithContentsOfURL:fileURL];
[mail addAttachmentData:fileData mimeType:@"video/quicktime" fileName:[myPathDocs lastPathComponent]];

现在,当您调试此代码时,您会发现fileDatanilfileURL也将是nil(或至少是无效的网址)。

更改此行:

NSURL *fileURL = [NSURL URLWithString:myPathDocs];

为:

NSURL *fileURL = [NSURL fileURLWithPath:myPathDocs];

您需要这样做,因为myPathDocs是文件路径,而不是URL字符串。

此外,您应该修复构建myPathDocs的方式。而不是:

NSString *myPathDocs =  [documentsDirectory stringByAppendingPathComponent:
                             [NSString stringWithFormat:@"/Saved Video/%@",[player.contentURL lastPathComponent]]];

您应该执行以下操作:

NSString *myPathDocs = [[documentsDirectory stringByAppendingPathComponent:@"Saved Video"] stringByAppendingPathComponent:[player.contentURL lastPathComponent]];