2014-10-31 39 views
8

isteğe bağlı değer çıkarılırken bulunamadı. Uygulamamda bir gönderinin resmin olup olmadığını kontrol edip etmediğimi kontrol ediyorum. Bunun içinBeklenmedik bir şekilde

kullanıyorum:

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

Ancak yine de hata ile çıkageldi:

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

Ben düzeltilmesi kolay bir şey olduğundan emin değilim ama oldukça yeniyim bu - ne yapıyorum yanlış?

+0

Olası yinelenen o f [Bir ölümcül hata: Opsiyonel bir değer çıkarılırken beklenmedik bir şekilde sıfır bulunur ”demek? (http://stackoverflow.com/questions/32170456/what-does-fatal-error-unexpectedly-found-nil-while-unwrapping -an-isteğe bağlı-valu) – Hamish

cevap

14

bu şekilde yapmayı deneyin:

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

string geçerli bir anahtar olduğunu varsayarsak.

İsteğe bağlılarla çalışıyorsunuz, bu nedenle kullanmadan önce her dönüş nesnesini koşullu olarak dağıtın.

Zorla açmanın yasaklanması tehlikelidir ve yalnızca kesinlikle olduğunda, bir isteğe bağlı bir değer içerdiğinden emin olunmalıdır. ImageData'niz bir resim oluşturmak için doğru biçimde olmayabilir, ancak yine de zorlamakla yükümlüdür. Bu, Objective-C'de yapılması gereken bir şeydir, sadece nil nesnenin geçtiği anlamına gelir. Swift çok hoşgörülü değil.

+0

Teşekkürler :) Şimdi çalışıyor! –

1

Size ben bu kodu

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

ile aynı sorunla karşı karşıya imageView?.image = UIImage(data: image!)

0

çizgiyi imageView.image = UIImage(data: image!) değiştirin ve bu çözülebilir isteğe bağlı değerler

sarmak için unutmak Swift konudur

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