【发布时间】:2018-04-10 00:46:46
【问题描述】:
对于大多数消息传递应用程序,我似乎无法接收新用户发送的新消息或已在 tableview 中的用户发送的新消息。我之前问过这个问题,并尝试按照链接中的说明进行操作,有人好心地发给我(How do you properly order data from Firebase chronologically),但无论我尝试如何,我仍然无法获得预期的效果
func getChatsFeed(){
//following the links instruction "timeStamp" is suppose help return fireBase children in reverse order. "atValue: time" is a value for the time when my viewDidload.
let queryChats = Database.database().reference().queryOrdered(byChild: "timeStamp").queryEnding(atValue: time, childKey: "timeStamp")
queryChats.observe(.childAdded) { (snapshot) in
if let snapvalue = snapshot.value as? Dictionary<String,Any>, let
sender = snapvalue["sender"] as? String, let receiver =
snapvalue["receiver"] as? String, let message = snapvalue["messageBody"] as?
String, let key = snapvalue["key"] as? String, let timeStamp = snapvalue["timeStamp"] as? String{
let newMessage = FeedMessage(sender: sender, receiver: receiver, messageBody: message, key: key, timeStamp: timeStamp)
feedUpdate.append(newMessage)
self.chatsTableView.reloadData()
}
}
}
我所包含的链接因解决了许多 StackOverflow 用户问题而受到了相当多的赞誉,所以也许我在某个地方搞砸了,因为不完全了解所有不同的 Firebase 方法,可能就是这种情况。有人指点吗?
【问题讨论】:
-
那么新数据是否出现在您的表格中?
-
不采用这种方法。但是我尝试过的其他方法,虽然它们填充了我的 tableView,但它们不会像我想要的那样将新的/更改的数据源元素移动到 tableView 的顶部。
-
打印出来的时候,是不是排序好的?
-
@Torewin 我实际上找到了解决问题的方法。起初我的逻辑是有缺陷的,但我一直在研究它,并认为如果我存储了一个值来告诉用户是否曾经进行过对话,然后通过迭代和更新具有相同发送者的 feedMessage 对象数组来更新messagBody 属性值和接收器。它仍然不完美,但它没有任何奇怪的错误或惊喜。我的下一步是能够在用户收到新消息时向他们发送后台通知。我已经尝试编写此功能,但什么都没有触发
-
很高兴您可以使用它! Firebase/Google 有一些不错的教程可以帮助您开始使用通知。您将需要一个应用服务器来处理通知或让您的应用始终在后台运行。
标签: arrays swift uitableview firebase cells