MFMailComposeViewController целую вечность для отправки электронной почты - PullRequest
0 голосов
/ 29 января 2019

Я создаю приложение, в которое мне нужно вложить и отправить несколько фотографий по электронной почте.Для этого я сохраняю фотографии на диск в VC камеры и обращаюсь к ним в viewDidLoad () VC электронной почты.Я храню их как .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 секунд.Кнопка «отправить» просто застревает.Я не знаю почему.Пожалуйста, помогите.

1 Ответ

0 голосов
/ 30 января 2019

Это была проблема с весом изображения.Одно изображение весило 6848,7939453125 КБ.Поскольку у меня было несколько изображений, их обработка заняла много времени.Сжатие их методом image.jpegData(compressionQuality: CGFloat)!) решило все проблемы.Спасибо Марк Торманн за предложение об исправлении!

...