Swift 3 - 生成的QR码UIImage将附加到电子邮件,但我得到错误“发现零,同时解开一个可选值”
问题描述:
我有QR码发生器工作,它显示图像到我的qrImageView
UIImageView
。Swift 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
}
答
试试这个,
if let image = qrImageView.image {
let data = UIImagePNGRepresentation(image) as NSData?
}
而不是
if let image = qrImageView.image {
let data = UIImagePNGRepresentation(image)! as NSData
}
看来,这是强制解开值的代码的唯一部分。
你好。感谢您的回复。我试过了,但仍然得到相同的错误。它似乎无法在qrImageView.image中找到任何值,即使它当前正在显示QRCode图像。 – TSM
你能否确认在这一行中是否发生错误? – Kiester
我相信这是引发错误的代码行。它发生在我点击发送电子邮件按钮时。事实上,我试图此代码***如果让图像= qrImageView.image { 如果让数据= UIImagePNGRepresentation(图像){ mailComposerVC.addAttachmentData(数据,mime类型: “图像/ PNG”,文件名: “图像”) } } ***和电子邮件页面显示,但它不包含任何附件,只有主题,收件人和邮件正文 – TSM