我正在尝试使用MessageUI发送mp4音频文件作为附件
我有一个包含用户可以选择发送的不同文件的tableview,当用户在电子邮件选项上滑动行和点击时,会弹出一个电子邮件表单以及将要发送的文件。我能够找到文件位置但不能加载数据。这是我的代码。
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]?
{
let mail = UITableViewRowAction(style: .normal, title: "Mail") { action, index in
let mailComposeViewController = self.configureMailController()
if MFMailComposeViewController.canSendMail() {
if let filePath = URL(string: self.filesArray[indexPath.row]) {
print(filePath)
if let fileData = NSData(contentsOfFile: String(describing: filePath)) {
print("file data loaded")
mailComposeViewController.addAttachmentData( fileData as Data, mimeType: "audio/mp4", fileName: self.filesArray[indexPath.row])
}
}
self.present(mailComposeViewController, animated: true, completion: nil)
} else {
self.showMailError()
}
}
let delete = UITableViewRowAction(style: .default, title: "Delete") { action, index in
try? FileManager.default.removeItem(at: self.getDirectory().appendingPathComponent("\(indexPath.row).mp4"))
self.filesArray.remove(at: indexPath.row)
self.fileDateInfoArray.remove(at: indexPath.row)
self.fileStamps.remove(at: indexPath.row)
tableView.reloadData()
UserDefaults.standard.set(self.filesArray, forKey: "arrayOfRecordedFiles")
UserDefaults.standard.set(self.fileDateInfoArray, forKey: "arrayOfDates")
UserDefaults.standard.set(self.fileStamps, forKey: "arrayOfTimeStamps")
}
return [delete, mail]
}
func configureMailController() -> MFMailComposeViewController {
let mailComposerVC = MFMailComposeViewController()
mailComposerVC.mailComposeDelegate = self
mailComposerVC.setSubject("Citrus Piano")
return mailComposerVC
}
func showMailError() {
let sendMailErrorAlert = UIAlertController(title: "Could not send email", message: "Your device could not send email", preferredStyle: .alert)
let dismiss = UIAlertAction(title: "Ok", style: .default, handler: nil)
sendMailErrorAlert.addAction(dismiss)
self.present(sendMailErrorAlert, animated: true, completion: nil)
}
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
controller.dismiss(animated: true, completion: nil)
}
答案 0 :(得分:0)
尝试使用以下功能附加音频文件
func configuredMailComposeViewController() -> MFMailComposeViewController {
let mailComposerVC = MFMailComposeViewController()
mailComposerVC.mailComposeDelegate = self
mailComposerVC.setToRecipients(["iosGeek@gmail.com"])
mailComposerVC.setSubject("New Request")
// locate folder containing audio file
let documentsPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)[0]
let AudioFileNameToBeAdded = (documentsPath as NSString).appendingPathComponent("/yourFolderName/\(audioFileNameAtIndex)")
let fileData = NSData(contentsOfFile: AudioFileNameToBeAdded)
mailComposerVC.addAttachmentData(fileData! as Data, mimeType: "audio/wav", fileName: self.audioFileNameAtIndex)
mailComposerVC.setMessageBody("", isHTML: false)
return mailComposerVC
}
我的输出:
我认为在你的情况下 功能可能是
- > 如果要将文件保存在文件夹中
func configuredMailComposeViewController() -> MFMailComposeViewController {
let mailComposerVC = MFMailComposeViewController()
mailComposerVC.mailComposeDelegate = self
mailComposerVC.setToRecipients(["iosGeek@gmail.com"])
mailComposerVC.setSubject("New Request")
// locate folder containing audio file
let documentsPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)[0]
let AudioFileNameToBeAdded = (documentsPath as NSString).appendingPathComponent("/yourFolderName/\(audioFileNameAtIndex)")
let fileData = NSData(contentsOfFile: AudioFileNameToBeAdded)
mailComposerVC.addAttachmentData(fileData! as Data, mimeType: "audio/mp4", fileName: self.audioFileNameAtIndex)
mailComposerVC.setMessageBody("", isHTML: false)
return mailComposerVC
}
- > 如果您直接将其保存在目录
中func configuredMailComposeViewController() -> MFMailComposeViewController {
let mailComposerVC = MFMailComposeViewController()
mailComposerVC.mailComposeDelegate = self
mailComposerVC.setToRecipients(["iosGeek@gmail.com"])
mailComposerVC.setSubject("New Request")
// locate folder containing audio file
let documentsPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)[0]
let AudioFileNameToBeAdded = (documentsPath as NSString).appendingPathComponent(audioFileNameAtIndex)
let fileData = NSData(contentsOfFile: AudioFileNameToBeAdded)
mailComposerVC.addAttachmentData(fileData! as Data, mimeType: "audio/mp4", fileName: audioFileNameAtIndex)
mailComposerVC.setMessageBody("", isHTML: false)
return mailComposerVC
}
Crash At - Line mailComposerVC.addAttachmentData(fileData! as Data, mimeType: "audio/mp4", fileName: self.audioFileNameAtIndex
)
可能是由于你提供的错误路径
如果可能,我可以看到您使用什么方法来获取文档目录路径?您想要共享的文件位于主目录内的其他目录中
注意:只需使用以下几行来访问您的文件
let documentsPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)[0]
let AudioFileNameToBeAdded = (documentsPath as NSString).appendingPathComponent(audioFileNameAtIndex)
let fileData = NSData(contentsOfFile: "/folderNameIfAny/\(audioFileNameAtIndex)")