我想通过电子邮件发送.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];
当邮件编辑器出现时,我可以在邮件正文中看到附件,但是我收到了这封邮件而没有附件。我错过了什么吗?或做错了什么?
请帮帮我。
答案 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]];
现在,当您调试此代码时,您会发现fileData
为nil
。 fileURL
也将是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]];