2014-10-31 11 views
8

Nella mia app, sto verificando se un post ha una foto o meno.Trovato inaspettatamente nil mentre si scartano il valore opzionale

Per questo sto usando:

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

Tuttavia, si tratta ancora con l'errore:

fatal error: unexpectedly found nil while unwrapping an Optional value.

Sono sicuro che è una cosa facile da risolvere, ma io sono abbastanza nuovo per questo - cosa sto sbagliando?

+0

Possibile duplicato o f [Che cosa significa "errore fatale: inaspettatamente trovato nil mentre si scartina un valore facoltativo" significa?] (http://stackoverflow.com/questions/32170456/what-does-fatal-error-unexpectedun-found-n--while-unwrapping -an-optional-valu) – Hamish

risposta

14

provare a farlo in questo modo:

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

Supponendo che string è una chiave valida.

Si tratta di optionals, quindi condizionare in modo condizionale ciascun oggetto restituito prima di utilizzarlo.

Lo srotolamento forzato è pericoloso e deve essere utilizzato solo quando si è assolutamente sicuro che un elemento facoltativo contenga un valore. I tuoi imageData potrebbero non essere nel formato corretto per creare un'immagine, ma tu lo stai forzatamente scartando comunque. Questo va bene in Objective-C, in quanto significa semplicemente che gli oggetti sono passati in giro. Swift non è così tollerante.

+0

Grazie :) Lavorando ora! –

1

E 'il problema della rapida quando si dimentica di avvolgere valori opzionali

Sostituire linea imageView.image = UIImage(data: image!) con imageView?.image = UIImage(data: image!)

0

Ho affrontato lo stesso problema con questo codice

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

e risolto da questo

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