Swift3 Swift 3-生成的二维码UIImage将附加到电子邮件中,但我收到错误“;展开可选值“时发现为零”;

Swift3 Swift 3-生成的二维码UIImage将附加到电子邮件中,但我收到错误“;展开可选值“时发现为零”;,swift3,uiimage,qr-code,email-attachments,unwrap,Swift3,Uiimage,Qr Code,Email Attachments,Unwrap,我让二维码发生器工作,它将图像显示到我的qrImageViewUIImageView 现在,我想做的是将二维码图像附加到电子邮件中。尝试了下面指定的代码,但出现错误“在展开可选值时发现为零” 请帮忙 生成二维码的功能 func generateQRCode(from string:String) -> UIImage? { let data = string.data(using: String.Encoding.isoLatin1) if let filter

我让二维码发生器工作,它将图像显示到我的qrImageViewUIImageView

现在,我想做的是将二维码图像附加到电子邮件中。尝试了下面指定的代码,但出现错误“在展开可选值时发现为零”

请帮忙

生成二维码的功能

  func generateQRCode(from string:String) -> UIImage? {

    let data =  string.data(using: String.Encoding.isoLatin1)

    if let filter = CIFilter(name:"CIQRCodeGenerator") {
        filter.setValue(data, forKey: "inputMessage")
        let transform = CGAffineTransform(scaleX: 100, y: 100)

        if let output = filter.outputImage?.applying(transform) {
            return UIImage(ciImage: output)
        }
    }
    return nil
}

@IBAction func generateAction(_ sender: Any) {

    if let actualText = qrCodeTextField.text {
        let image = generateQRCode(from: actualText)
        qrImageView.image = image
    }



}
将二维码附加到电子邮件的代码

func configureMailController() -> MFMailComposeViewController {
    let mailComposerVC = MFMailComposeViewController()

    mailComposerVC.mailComposeDelegate = self

    mailComposerVC.setToRecipients(["tsm@yahoo.com"])
    mailComposerVC.setSubject("\(subject) QR Code")
    mailComposerVC.setMessageBody("Please see attached QR Code", isHTML: false)

    //Add Image as Attachment

    if let image = qrImageView.image {
        let data: NSData = UIImagePNGRepresentation(image)! as NSData

        mailComposerVC.addAttachmentData(data as Data, mimeType: "image/png", fileName: "image")

    }


    return mailComposerVC

}
试试这个

if let image = qrImageView.image { 
    let data = UIImagePNGRepresentation(image) as NSData?
}
而不是

if let image = qrImageView.image {
    let data = UIImagePNGRepresentation(image)! as NSData
}

似乎这是代码中唯一一个强制展开值的部分。

这对我很有效。我必须先将CIImage转换为UIImage,以便QRCode可以附加到电子邮件中

func convert(cmage:CIImage) -> UIImage
{       
    let context:CIContext = CIContext.init(options: nil)
    let cgImage:CGImage = context.createCGImage(cmage, from: cmage.extent)!        
    let image:UIImage = UIImage.init(cgImage: cgImage)        
    return image
}

来源:

你好。谢谢你的回复。我试过了,但还是犯了同样的错误。即使当前正在显示QRCode图像,它似乎在qrImageView.image中也找不到任何值。我相信这是引发错误的代码行。每当我单击“发送电子邮件”按钮时,就会出现这种情况。实际上我试过这段代码***if let image=qrImageView.image{if let data=UIImagePNGRepresentation(image){mailComposerVC.addAttachmentData(data,mimeType:“image/png”,fileName:“image”)}***显示电子邮件页面,但不包含任何附件,仅包含主题、收件人和邮件正文