我需要按日期(unix)排列我的firebase数据。我以为queryOrdered(byChild: "date")
会做到这一点。完成search并找到this,这是有道理的:
但是当您请求快照的.value时,键+数据将转换为Dictionary。由于字典没有额外的位置来放置有关订单的信息,因此在转换为字典时该信息会丢失。
使用相同的json但使用unix日期进行修改...:
{
"users" : {
"alovelace" : {
"name" : "Last Year",
"date" : 1480550400
},
"eclarke" : {
"name" : "New Year Now",
"date" : 1483228800
},
"ghopper" : {
"name" : "New Year",
"date" : 1483228800
}
}
}
...当我的代码是这样的时候如何排序:
DataService.ds.REF_INCOMES.queryOrdered(byChild: "date").observe(.value, with: { (snapshot) in
if let snapshot = snapshot.children.allObjects as? [FIRDataSnapshot] {
print(snapshot)
for snap in snapshot {
if let incomeDict = snap.value as? [String: AnyObject] { // What needs to change here?
let key = snap.key
let income = Income(incomeId: key, incomeData: incomeDict)
self.incomes.append(income)
self.incomes.reverse()
}
}
}
self.tableView.reloadData()
})
下面的图片,“去年”应该是最后一个,但不是:
我有ruby mentality所以我很快失去了。感谢。
答案 0 :(得分:0)
我认为您在这里缺少的是sort
功能,请尝试以下代码并告诉我结果如何:
DataService.ds.REF_INCOMES.queryOrdered(byChild: "date").observe(.value, with: { (snapshot) in
guard let usersSnapshot = snapshot.value as? [String:NSObject] else{
return
}
let users = usersSnapshot["users"] as! [String:AnyObject]
let sorted = users.sorted{($0.0.value["date"] as! Double) > ($0.1.value["date"] as! Double)}
print(sorted) // It should be: New Year Now, New Year, Last Year
})
答案 1 :(得分:0)
我认为问题在于你正在观察.value
,这基本上忽略了顺序。尝试按.childAdded
观察,它通过操作尊重订单。
欲了解更多信息,请阅读第一个"专业提示":https://howtofirebase.com/collection-queries-with-firebase-b95a0193745d