gpt4 book ai didi

ios - 按 child 排序的 Firebase 查询无法正常工作

转载 作者:搜寻专家 更新时间:2023-11-01 07:07:49 27 4
gpt4 key购买 nike

问题

我正在尝试通过 createionDate 查询对象列表。由于某种原因,它不会按升序获取对象。

我的数据结构

enter image description here

我的代码

func fetchQuest() {

guard let uid = selectedUID else {return}

let ref = FIRDatabase.database().reference().child("questsByUID").child(uid)
let query = ref.queryOrdered(byChild: "CreationDate")
query.observeSingleEvent(of: .value, with: { (snapshot) in


guard let dictionaries = snapshot.value as? [String: Any] else {return}
dictionaries.forEach({ (key, value) in

guard let dictionary = value as? [String : Any] else {return}
let quest = Quest(uid: uid, dictionary: dictionary)
quest.questID = key
print("quest name is: ", quest.questName)
self.board.append(quest)

})
self.collectionView?.reloadData()
}) { (err) in
print("unable to fetch quest:", err)
}
}

我的模型

class Quest {

var questID = ""
let questName: String
let creatorUID: String
let creationDate: Date

init(uid: String, dictionary: [String: Any]) {
self.questName = dictionary["questName"] as? String ?? ""
self.creatorUID = uid
let secondsFrom1970 = dictionary["creationDate"] as? Double ?? 0
self.creationDate = Date(timeIntervalSince1970: secondsFrom1970)
}}

控制台输出

任务名称是:第三个任务

任务名称是:第二个任务

任务名称是:艾达的第四个任务

任务名称是:艾达的第一个任务

最佳答案

鉴于 Firebase 数据库区分大小写,请尝试将您的查询更改为:

let query = ref.queryOrdered(byChild: "CreationDate")

到:

let query = ref.queryOrdered(byChild: "creationDate")

您的 Quest 模型类已经使用了正确的拼写。

更新。正如另一个答案所提到的,字典保留顺序。因此,您应该改用 FIRDataSnapshot.children 迭代器。例如:

query.observeSingleEvent(of: .value) { 
(snapshots) in
for child in snapshots.children {
let snapshot = child as! DataSnapshot
guard let dictionary = snapshot.value as? [String : Any] else { return }
let quest = Quest(uid: uid, dictionary: dictionary)
quest.questID = snapshot.key
...
}
}

请注意,我仍在使用与您的原始代码相同的 observeSingleEvent

关于ios - 按 child 排序的 Firebase 查询无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47025221/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com