【问题标题】:MFMailComposeViewController taking ages to send emailMFMailComposeViewController 需要很长时间才能发送电子邮件
【发布时间】:2019-01-29 18:14:00
【问题描述】:

我正在构建一个应用程序,我需要在其中附加并在电子邮件中发送多张照片。为此,我将照片保存到相机 VC 的磁盘中,并在电子邮件 VC 的 viewDidLoad() 中访问它们。我将它们作为 .pngData() 存储在一个数组中,并使用以下代码将它们附加到 MFMailComposeViewController 中:

func configuredMailComposeViewController() -> MFMailComposeViewController {

    let mailComposerVC = MFMailComposeViewController()
    mailComposerVC.mailComposeDelegate = self

    mailComposerVC.setToRecipients([UserDefaults.standard.string(forKey: "Email")!])
    mailComposerVC.setSubject("Заявление")
    mailComposerVC.setMessageBody("\(ProtocolText.text!)", isHTML: false)

    // unpacking images from array and attaching them to Email

    var dataName = 0
    for data in imageData {
        dataName += 1
        mailComposerVC.addAttachmentData(data, mimeType: "image/png", fileName: "\(dataName).png")
    }

    return mailComposerVC

}

这些是我的“保存”和“获取”方法:

func loadImage(fileName: String) -> UIImage? {

    let documentDirectory = FileManager.SearchPathDirectory.documentDirectory

    let userDomainMask = FileManager.SearchPathDomainMask.userDomainMask
    let paths = NSSearchPathForDirectoriesInDomains(documentDirectory, userDomainMask, true)

    if let dirPath = paths.first {
        let imageUrl = URL(fileURLWithPath: dirPath).appendingPathComponent(fileName)
        let image = UIImage(contentsOfFile: imageUrl.path)
        return image

    }

    return nil
}

    // Used in CameraViewController
func saveImage(imageName: String, image: UIImage) {


    guard let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return }

    let fileName = imageName
    let fileURL = documentsDirectory.appendingPathComponent(fileName)
    guard let data = image.jpegData(compressionQuality: 1) else { return }

    //Checks if file exists, removes it if so.
    if FileManager.default.fileExists(atPath: fileURL.path) {
        do {
            try FileManager.default.removeItem(atPath: fileURL.path)
            print("Removed old image")
        } catch let removeError {
            print("couldn't remove file at path", removeError)
        }

    }

    do {
        try data.write(to: fileURL)
    } catch let error {
        print("error saving file with error", error)
    }

}

由于某种原因,图片附上了,但电子邮件至少需要 15 秒才能发送。 “发送”按钮卡住了。我不知道为什么。请帮忙。

【问题讨论】:

  • 这些图片有多大?上面的代码还让您将文件保存为 JPEG 并将它们附加为 PNG。使用 pngData 而不是 jpegData 会更好吗?
  • 谢谢!问题已修复。我相信由于文件大小,它非常慢。使用 0.75 的compressionQuality,滞后明显减少。

标签: ios swift mfmailcomposeviewcontroller messageui


【解决方案1】:

图片的重量有问题。一张图片的重量为 6848.7939453125 KB。由于我有多个图像,因此需要花费大量时间来处理它们。使用image.jpegData(compressionQuality: CGFloat)!) 方法压缩它们解决了所有问题。感谢 Mark Thormann 提出修复建议!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    相关资源
    最近更新 更多