Swift 3 - 生成的 QR 码 UIImage 要附加到电子邮件但我收到错误 "found nil while unwrapping an Optional value"
Swift 3 - Generated QR Code UIImage to be attached to email but I get error "found nil while unwrapping an Optional value"
我有 QR 码生成器,它显示图像到我的 qrImageView
UIImageView
。
现在,我要做的是将二维码图像附加到电子邮件中。尝试了下面指定的代码,但出现错误 "found nil while unwrapping an Optional value".
请帮忙!
二维码生成功能
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
}
来源:
我有 QR 码生成器,它显示图像到我的 qrImageView
UIImageView
。
现在,我要做的是将二维码图像附加到电子邮件中。尝试了下面指定的代码,但出现错误 "found nil while unwrapping an Optional value".
请帮忙!
二维码生成功能
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
}
来源: