2016-03-25 37 views
4

gelen veriler, böyle denedim alın:Ben Firebase gelen verileri almak için çalışıyorum 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() 
     } 

ama bu satırda hata gösterir:

let data = snapshot.value as! NSDictionary 

Diyor ki Could not cast value of type '__NSArrayM' (0x10ebfc8d8) to 'NSDictionary' (0x10ebfcd60).

Firebase'deki verilerim şunun gibi:

enter image description here

Ancak diğer tarafta, kullanıcıların adını ve Firebase rolünü almak için başka bir ViewController kodu kullanın, çalışır.

enter image description here

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() 
     }) 
Ama neden ilk kod hep çökmesine.

Herhangi bir yardım için teşekkür ederiz. Teşekkürler.

+1

Eh, snapshot.value' bir 'NSArray' ve değil' görünüyor bir 'NSDictionary' (Hata mesajına göre), bu yüzden' olarak data = snapshot.value edelim! NSArray 've diğer değişimleri bu değişime göre değiştirin. – Larme

+0

Güncelleme sorumu tekrar kontrol edebilir misiniz, Başka bir kodla çalışır. – Khuong

+0

FireBase'i kullanmıyorum ve Swift'i konuşma, bu sadece tahmin, ama şunu fark ettin, 'employeeemanager' ile, 'task' var ve '0' bu endekste olduğunu gösterebilir 0 (bir dizi olarak), "taskignee" vb. Ile bir sözlük alırsınız. – Larme

cevap