【问题标题】:How make your tableView show new or update element at the top of your tableView PT.2如何让你的 tableView 在你的 tableView PT.2 顶部显示新的或更新的元素
【发布时间】: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


【解决方案1】:

对于其他方法,您已经使用了将数据加载到 feedUpdate 的位置,只需执行以下操作:

    chatsTableView.reloadData()
    let indexPath:IndexPath = IndexPath(row:0, section:0)
    chatsTableView.scrollToRow(at: indexPath, at: UITableViewScrollPosition .top, animated: true)

【讨论】:

  • @MM 很抱歉没有更清楚我的问题,如果新数据改变了我的数据源,我希望单元格中的数据发生变化,即如果我收到来自用户的初始消息并且如果我从已经与之聊天的用户那里收到后续消息。如果您可以在您的 iphone 上启动 Messages 应用程序——我必须尝试模仿该应用程序上初始 TableViewController 的行为。您的答案虽然看起来很准确,但已经在我的一对一 messagesVC 上成功实施,它模仿了当您在 iPhone 上的 Messages 应用程序中点击消息时加载的 VC。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
相关资源
最近更新 更多