Swift 3 - 生成的QR码UIImage将附加到电子邮件,但我得到错误“发现零,同时解开一个可选值”

问题描述:

我有QR码发生器工作,它显示图像到我的qrImageViewUIImageViewSwift 3 - 生成的QR码UIImage将附加到电子邮件,但我得到错误“发现零,同时解开一个可选值”

现在,我想要做的就是将该QR码图像附加到电子邮件。试了下面指定的代码,但我得到一个错误“发现零,同时展开一个可选值”。

请帮忙!

功能用于生成QR码

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 
    } 



} 

代码粘贴QR码至电子邮件

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

    mailComposerVC.mailComposeDelegate = self 

    mailComposerVC.setToRecipients(["[email protected]"]) 
    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 

} 

这对我有用。我的CIImage首先转换成UIImage的,这样的QR码可被附加到电子邮件

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 
} 

来源:Unable to convert CIImage to UIImage in Swift 3.0

试试这个,

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

而不是

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

看来,这是强制解开值的代码的唯一部分。

+0

你好。感谢您的回复。我试过了,但仍然得到相同的错误。它似乎无法在qrImageView.image中找到任何值,即使它当前正在显示QRCode图像。 – TSM

+0

你能否确认在这一行中是否发生错误? – Kiester

+0

我相信这是引发错误的代码行。它发生在我点击发送电子邮件按钮时。事实上,我试图此代码***如果让图像= qrImageView.image { 如果让数据= UIImagePNGRepresentation(图像){ mailComposerVC.addAttachmentData(数据,mime类型: “图像/ PNG”,文件名: “图像”) } } ***和电子邮件页面显示,但它不包含任何附件,只有主题,收件人和邮件正文 – TSM