ios - 如何订购与存储在firebase中相同的firebase实时数据?
问题描述
我已经尝试了一切,但数据没有按顺序排列,甚至快照也以无序的形式显示数据
我正在开发聊天应用程序。我想保持数据的顺序,所以聊天必须按顺序显示,但它没有发生。每当我发送消息时,它都会放在不在底部的旧消息之间
这里有最新消息“你在做什么?”
这是聊天。看看最新消息“你在做什么?”在哪里?
我观察消息的代码
public func getAllMessagesForConversation(with id: String, completion: @escaping (Result<[Message], Error>) -> Void) {
database.child("\(id)").queryOrdered(byChild: "date").observe(.value) { (snapshot) in
guard let value = snapshot.value as? [String:Dictionary<String, Any>] else{
completion(.failure(DatabaseError.failedToFetch))
return
}
var messages = [Message]()
for i in value {
guard let message = i.value["message"] as? String else {return}
let senderId = i.value["sender"] as? String
let recieverId = i.value["reciever"] as? String
let messageID = i.value["id"] as? String
var DATE = Date()
if let date = i.value["date"] as? String {
DATE = ChatViewController.dateFormatter.date(from: date)!
}
var kind: MessageKind?
kind = .text(message)
let finalKind = kind
let sender = Sender(photoURL: "",
senderId: senderId!,
displayName: Api.Params.inputUserName)
let abc = Message(sender: sender,
messageId: messageID ?? "",
sentDate: DATE,
kind: finalKind!)
messages.append(abc)
if messages.count == value.count {
messages = messages.sorted(by: { (lhs, rhs) -> Bool in
lhs.sentDate.toMillis() > rhs.sentDate.toMillis()
})
}
print(messages)
}
completion(.success(messages))
}
}
解决方案
推荐阅读
- python - 我需要帮助将数据附加到文本文件中
- perl - 如何在文件中搜索模式并有条件地替换它?
- c# - 自动法。通过实体属性解析通用 IRepository
- terminal - Fish shell 函数在使用 $TERM -e 调用时表现不同
- r - 当没有名称列时(或应创建名称列时)pivot_wider
- python - 为什么 np.nan 存储为字符串,无法使用 isnull()/isna()/notnull()/notna()?
- reactjs - SafeAreaView 测量功能在本机反应中不起作用
- ios - '在闭包中隐式使用'self';使用“自我”。在尝试使用身份验证切换视图控制器时使捕获语义明确
- flask - 如何在我想在 AWS 弹性 beanstalk 中部署的 Flask 应用程序中使用我的 firebase 凭证?
- ubuntu - 我在使用 make 时遇到问题