2016-03-25 21 views
4

からのデータは、私はこのような試みているなさい:私はFirebaseからデータを取得しようとしています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() 
     } 

が、それは、この行でエラーを示しています

let data = snapshot.value as! NSDictionary 

それは言う:Could not cast value of type '__NSArrayM' (0x10ebfc8d8) to 'NSDictionary' (0x10ebfcd60).

Firebaseのデータは次のようになります:

しかし、反対側では別のViewControllerで別のコードを使用してFirebaseからユーザーの名前と役割を取得します。

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

しかし、なぜ最初のコードは常にクラッシュ。

助けていただければ幸いです。ありがとう。

+1

まあ、それは 'snapshot.value'は' NSArray'ない(エラー・メッセージに応じて) 'NSDictionary'であること、などsnapshot.value =聞かせてデータ'ているようです!この変更に応じて他の行を変更します。 – Larme

+0

私の更新の質問をもう一度チェックしてください、それは別のコードで動作します。 – Khuong

+0

私はFireBaseを使用せず、Swiftを話さないので、それはちょうど推測ですが、 'employeemanager'では' task'があり、インデックスには '0'があることに気がつきましたか? 0(配列が持つように)、あなたは "assignee"などで辞書を取得します。 – Larme

答えて

関連する問題