2016-03-21 5 views
0

ich diese Methode habe:Crashing mit observeForSingleEventOfType

func fetchImageWithKey(key: String, completion: UIImage ->()) { 
    imagesEndPoint.childByAppendingPath(key).observeSingleEventOfType(.Value, withBlock: { snapshot in 
    guard let imageString = snapshot.value["imageString"] as? String else { return } 
    guard let imageData = NSData(base64EncodedString: imageString, options: .IgnoreUnknownCharacters), image = UIImage(data: imageData) else { fatalError() } 
    completion(image) 
    }) 
} 

das jedes Mal, wenn eine Zelle in cellForRowAtIndexPath aus der Warteschlange entfernt wird, aufgerufen wird. Aus irgendeinem Grund trifft diese Zeile guard let imageString = snapshot.value["imageString"] as? String else { return } während des Scrollens durch die TabelleView den else Block.

Ich stellte sicher, dass der Verweis tatsächlich den Schlüssel "imageString" und einen Wert vom Typ String am Ende hat. Ich denke, es hat etwas damit zu tun, dass die TableView-Zelle aus der Warteschlange entfernt wird, aber ich bin mir nicht sicher, wie ich dieses Problem angehen könnte.

Irgendwelche Ratschläge?

Antwort

0

Sind Sie sicher: snapshot.value ist ein Wörterbuch. Sie sollten überprüfen:

if let dic = snapshot.value as? NSDictionary{ 
      guard let imageString = dic["imageString"] as? String else { return } 
      guard let imageData = NSData(base64EncodedString: imageString, options: .IgnoreUnknownCharacters), image = UIImage(data: imageData) else { fatalError() } 
      completion(image) 
     }else{ 
      // 
     }