webentwicklung-frage-antwort-db.com.de

Unerwartet wurde beim Entpacken eines optionalen Werts nichts gefunden

In meiner App prüfe ich, ob ein Beitrag ein Bild hat oder nicht.

Dafür verwende ich:

if pictures[string]? != nil {
    if var image: NSData? = pictures[string]? {
        imageView.image = UIImage(data: image!)
    }
}

Es kommt jedoch immer noch mit dem Fehler:

schwerwiegender Fehler: Beim Entpacken eines optionalen Werts wurde unerwartet nichts gefunden.

Ich bin sicher, es ist leicht zu reparieren, aber ich bin ganz neu dabei - was mache ich falsch?

9
Ben Gray

Versuchen Sie es so:

if let imageData = pictures[string] {
    if let image = UIImage(data: imageData) {
        imageView.image = image
    }
}

Angenommen, string ist ein gültiger Schlüssel.

Da es sich um optionale Objekte handelt, müssen Sie jedes zurückgegebene Objekt vor der Verwendung unbedingt auspacken.

Das erzwungene Auspacken ist gefährlich und sollte nur verwendet werden, wenn Sie absolut sicher sind, dass ein optionales Element einen Wert enthält. Ihre imageData haben möglicherweise nicht das richtige Format, um ein Bild zu erstellen, aber Sie packen es trotzdem gewaltsam aus. Dies ist in Objective-C in Ordnung, da es nur bedeutet, dass nil Objekte herumgereicht werden. Swift ist nicht so tolerant.

14
Anorak

Es ist das Problem von Swift, wenn Sie vergessen, optionale Werte einzugeben

Ersetzen Sie die Zeile imageView.image = UIImage(data: image!) Durch imageView?.image = UIImage(data: image!).

1
iOS Developer

Ich habe das gleiche Problem mit diesem Code gehabt

if(!placeholderColor.isEqual(nil))
 {
   self.attributedPlaceholder = NSAttributedString(string: self.placeholder!, attributes: [NSForegroundColorAttributeName : placeholderColor])
 }

und von diesem gelöst

if let placeColor = placeholderColor
 {
   self.attributedPlaceholder = NSAttributedString(string: self.placeholder!, attributes: [NSForegroundColorAttributeName : placeColor])
 }
0
Varun Naharia

Überprüfen Sie zunächst das Format der base64-Zeichenfolge. Meine Zeichenfolge hatte das folgende Format: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAYAAADnRuK4AAAZDElEQVR42u1daWATZRp+JkfT+76g90ELtKUX5wICshREgYKCKAiCC4iCu+Iq6q6CoKuLF4Igl6jLDaKgiJwiN5SjQAulpTe97zY90qRJ9sc, aber vor dem Komma ist keine Angabe erforderlich. Ich habe den Code zum Laufen gebracht, indem ich das Format folgendermaßen geändert habe:
iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAYAAADnRuK4AAAZDElEQVR42u1daWATZRp+JkfT+76g90ELtKUX5wICshREgYKCKAiCC4iCu+Iq6q6CoKuLF4Igl6jLDaKgiJwiN5SjQAulpTe97zY90qRJ9sc

0
anotherNoob