gpt4 book ai didi

ios - 如何获取按时间戳排序的消息

转载 作者:搜寻专家 更新时间:2023-11-01 06:02:13 25 4
gpt4 key购买 nike

我想按创建日期(即时间戳)获取所有消息。

我的数据结构是这样的:

messages
XRJONcahNUgeNrfkH3cmITJt3409 (auto uid of owner - user)
-KoOSxA2Iajk3kv20U_p (automatic uid generated by Firebase)
message: "Hi"
senderId: "X8Oxg5J9Imb12C1iYBXJT9P48909"
senderName: "Dave"
timestamp: 1505813320526 (automatic timestamp)
-GdOSxR2Iajk3kv20U_p --- I NEED TO SORT THESE UIDS
message: "Hello"
senderId: "G7Oxg5J9Imb12C1iYBXJT9P48909"
senderName: "Frank"
timestamp: 1505813321024 (automatic timestamp)

我收到的所有消息都是这样的:

database.child("messages").child(ownersId).observeSingleEvent(of: .value, with: { (snapshot) in
print(snapshot)
if let messagesDict = snapshot.value as? [String:AnyObject] {
for (_,message) in messagesDict {
self.messages.append((message["message"] as? String)!)
self.users.append((message["senderName"] as? String)!)
self.timestamps.append((message["timestamp"] as? IntMax)!)
}
}
completionHandler(true)

}) { (error) in
print(error.localizedDescription)
completionHandler(false)
}

那么问题来了,我怎样才能让所有消息从旧到新排序呢?我不知道在这种特定情况下如何使用排序方法(queryOrderedByKey()、queryOrderedByValue() 或 queryOrdered(byChild: "timestamp")。Firebase 以随机顺序向我发送数据(我不知道它是否是随机的,但它是未按日期排序)。

最佳答案

正如 Rashwan 所说,您需要调用 queryOrderedByChild() 以正确的顺序返回项目。然后循环遍历 snapshot.children 以确保您也以正确的顺序处理它们。

所以:

database.child("messages").queryOrdered(byChild: "timestamp").observe(.value, with: { snapshot in
for child in snapshot.children.allObjects as! [DataSnapshot] {
print("\(child.key)")
}

completionHandler(true)
})

回调中重要的是不要将整个快照转换成字典,因为字典不会维护项目的顺序。

关于ios - 如何获取按时间戳排序的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46299009/

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