2016-03-25 22 views
4

Ich versuche, Daten von Firebase zu bekommen, habe ich so versucht:Erhalten Sie Daten von Firebase

FIREBASE_REF.childByAppendingPath("tasks").observeEventType(.Value, withBlock: { (snapshot) -> Void in 
      print(snapshot.value) 
      self.tasks = [Task]() 
      var task = Task() 
      let data = snapshot.value as! NSDictionary 
      let tasksFromServer = data.allValues as! [NSDictionary] 
      for taskFromServer in tasksFromServer { 
       task.description = taskFromServer.objectForKey("description") as! String 
       task.startTime = taskFromServer.objectForKey("startTime") as! String 
       task.endTime = taskFromServer.objectForKey("endTime") as! String 
       task.progress = taskFromServer.objectForKey("progress") as! Int 
       let priorityTemp = taskFromServer.objectForKey("priority") as! Int 
       switch priorityTemp { 
       case 0: task.priority = .Low 
       case 1: task.priority = .Medium 
       case 2: task.priority = .High 
       default: break 
       } 
       task.assignee = taskFromServer.objectForKey("assignee") as! String 
       self.tasks.append(task) 
      } 
      MBProgressHUD.hideAllHUDsForView(self.view, animated: true) 
      self.tableView.reloadData() 
     } 

aber es zeigt Fehler in dieser Zeile:

let data = snapshot.value as! NSDictionary 

Dort heißt es: Could not cast value of type '__NSArrayM' (0x10ebfc8d8) to 'NSDictionary' (0x10ebfcd60).

Meine Daten von Firebase wie folgt:

enter image description here

Aber auf der anderen Seite, ich benutze einen anderen Code in einem anderen ViewController, um Benutzernamen und Rolle von Firebase zu erhalten, funktioniert es.

FIREBASE_REF.childByAppendingPath("users").observeEventType(.Value, withBlock: { (snapshot) -> Void in 
      self.names = [] 
      self.roles = [] 
      let data = snapshot.value as! NSDictionary 
      let employees = data.allValues as! [NSDictionary] 
      for employee in employees { 
       let name = (employee.objectForKey("firstName") as! String) + " " + (employee.objectForKey("lastName") as! String) 
       self.names.append(name) 
       let role = employee.objectForKey("position") as! String 
       self.roles.append(role) 
      } 
      MBProgressHUD.hideAllHUDsForView(self.view, animated: true) 
      self.collectionView.reloadData() 
     }) 

enter image description here

Aber warum der erste Code immer abstürzen.

Alle Hilfen würden geschätzt werden. Vielen Dank.

+1

Nun scheint es, dass '' snapshot.value' ein NSArray' ist und kein 'NSDictionary' (entsprechend Ihrer Fehlermeldung), so' lassen data = snapshot.value wie! NSArray', und ändern Sie die anderen Zeilen entsprechend dieser Änderung. – Larme

+0

Können Sie meine Update-Frage erneut überprüfen? Es funktioniert mit einem anderen Code. – Khuong

+0

Ich benutze FireBase nicht und spreche Swift nicht, also, es ist nur raten, aber haben Sie bemerkt, dass es mit 'employeemanager'' task' gibt, und die a'0, die dazu führen kann, anzuzeigen, dass es am Index ist 0 (wie ein Array haben würde), erhalten Sie ein Wörterbuch mit "Beauftragten" usw. – Larme

Antwort

Verwandte Themen