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:
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()
})
Aber warum der erste Code immer abstürzen.
Alle Hilfen würden geschätzt werden. Vielen Dank.
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
Können Sie meine Update-Frage erneut überprüfen? Es funktioniert mit einem anderen Code. – Khuong
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