Dans mon application, je vérifie si un message a une image ou non.
Pour cela j'utilise:
if pictures[string]? != nil {
if var image: NSData? = pictures[string]? {
imageView.image = UIImage(data: image!)
}
}
Cependant, l'erreur est toujours la suivante:
erreur fatale: trouvé de manière inattendue nil lors du déroulement d'une valeur facultative.
Je suis sûr que c'est quelque chose de facile à réparer, mais je suis assez novice dans ce domaine.
Essayez de le faire de cette façon:
if let imageData = pictures[string] {
if let image = UIImage(data: imageData) {
imageView.image = image
}
}
En supposant que string
est une clé valide.
Vous avez affaire à des options, vous devez donc conditionner conditionnellement chaque objet de retour avant de l'utiliser.
Le déballage forcé est dangereux et ne doit être utilisé que si vous êtes absolument sûr qu'un option contient une valeur. Le format de votre imageData peut ne pas être correct pour créer une image, mais vous forcez néanmoins le dérouler de force. Cela convient à Objective-C car cela signifie simplement que les objets nil
sont transmis. Swift n'est pas si tolérant.
C’est le problème de Swift quand vous oubliez d’emballer des valeurs optionnelles
Remplacez la ligne imageView.image = UIImage(data: image!)
Par imageView?.image = UIImage(data: image!)
J'ai rencontré le même problème avec ce code
if(!placeholderColor.isEqual(nil))
{
self.attributedPlaceholder = NSAttributedString(string: self.placeholder!, attributes: [NSForegroundColorAttributeName : placeholderColor])
}
et résolu par cela
if let placeColor = placeholderColor
{
self.attributedPlaceholder = NSAttributedString(string: self.placeholder!, attributes: [NSForegroundColorAttributeName : placeColor])
}
Vérifiez d'abord le format de la chaîne base64. Ma chaîne avait le format suivant: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAYAAADnRuK4AAAZDElEQVR42u1daWATZRp+JkfT+76g90ELtKUX5wICshREgYKCKAiCC4iCu+Iq6q6CoKuLF4Igl6jLDaKgiJwiN5SjQAulpTe97zY90qRJ9sc
mais il n’est pas nécessaire de faire une virgule avant la virgule. J'ai obtenu le code en changeant le format en:iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAYAAADnRuK4AAAZDElEQVR42u1daWATZRp+JkfT+76g90ELtKUX5wICshREgYKCKAiCC4iCu+Iq6q6CoKuLF4Igl6jLDaKgiJwiN5SjQAulpTe97zY90qRJ9sc