2017-08-04 1 views
1

J'ai le générateur de code QR fonctionnant, il affiche l'image à mon qrImageViewUIImageView. Maintenant, ce que je veux faire est d'attacher cette image de code de QR au courrier électronique. J'ai essayé le code spécifié ci-dessous, mais j'obtiens une erreur "trouvée nulle lors du déballage d'une valeur optionnelle".Swift 3 - Généré Code QR UIImage à joindre à l'email mais j'obtiens l'erreur "trouvé nul tout en déballant une valeur facultative"

Aidez s'il vous plaît!

Fonction pour générer QR CODE

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 
    } 



} 

code pour fixer QR Code à Envoyer

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 

} 

Répondre

0

Cela fonctionne pour moi. Je dois convertir le premier à CIImage UIImage afin que le QRCode peut être attaché à un courriel

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 
} 

Source: Unable to convert CIImage to UIImage in Swift 3.0

0

Essayez ce,

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

Au lieu de

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

Il semble que c'est la seule partie du code qui force la décompression de la valeur.

+0

Bonjour. Merci pour votre réponse. J'ai essayé et j'ai toujours la même erreur. Il semble qu'il ne trouve aucune valeur dans l'image qrImageView.image même si elle affiche actuellement l'image QRCode. – TSM

+0

Pouvez-vous confirmer si dans cette ligne l'erreur est survenue? – Kiester

+0

Je crois que c'est la ligne de code qui jette une erreur. Cela se produit chaque fois que je clique sur le bouton Envoyer un e-mail. J'ai essayé ce code *** si laisser image = {qrImageView.image si laissez data = UIImagePNGRepresentation (image) { mailComposerVC.addAttachmentData (données, mimeType: "image/png", fileName: "image") } } *** et la page d'e-mail s'affiche, mais elle ne contient aucune pièce jointe, uniquement le sujet, le destinataire et le corps du message – TSM