当我从Firebase实时数据库获取数据时,我遇到了麻烦,所以我写了这个问题。
这就是我想做的事情。
这是保存在Firebase数据库中的数据。
{ "schedule":
{"day0" : [{"title":"wake up", "content":"Wake up at 7 AM"},
{"title":"School","content":"Go to the school"}],
"day1" : [{"title":"day1 wakeup", "content":"Wake up at 8 AM"},
{"title":"Supermarket", "content" :"buy some food"}]
}
}
在这种情况下,我想在第0天获得所有时间表。
[{"title":"wake up", "content":"Wake up at 7 AM"},
{"title":"School","content":"Go to the school"}]
所以我制作了这样的代码。
var ref:DatabaseReference!
ref = Database.database().reference()
ref.child("schedule").child("day0").observeSingleEvent(of: .childAdded) { (snapshot) in
var postData = [NSDictionary]()
self.dataList = (snapshot.value as? NSDictionary)!
print("\(self.dataList)")
self.tableView.reloadData()
}
这就是结果。 :(
{"title":"wake up", "content":"Wake up at 7 AM"}
如何获取“day0”值的所有数据?
答案 0 :(得分:0)
现在您正在观察单个.childAdded
事件。这意味着您只能获得day0
下的第一个子节点。
有两种方法让所有孩子:
.childAdded
事件.value
事件第一种方法最简单......
ref.child("schedule").child("day0").observe(.childAdded) { (snapshot) in
print("\((snapshot.value as? NSDictionary)!)")
self.tableView.reloadData()
}
通过此最小更改,将为每个子节点调用完成处理程序。另请参阅此example in the documentation on listening for child events。
或者你可以观察.value
(连续一次),一次调用所有匹配的数据。这意味着您的代码需要处理它一次获取所有数据的事实:
ref.child("schedule").child("day0").observe(.value) { (snapshot) in
var postData = [NSDictionary]()
self.dataList = (snapshot.value as? NSDictionary)!
print("\(self.dataList)")
self.tableView.reloadData()
}
另见example in the documentation to listening for value events。
答案 1 :(得分:0)
var dataList: [Dictionary<String,Any>]?
ref.child("schedule").child("Day0").observeSingleEvent(of: .value) { (snapshot) in
self.dataList = snapshot.value as! [Dictionary]
self.tableView.reloadData()
}
这是我最终成功的结果!谢谢你的帮助!