gpt4 book ai didi

ios - 在 Firebase 和 Swift 中初始加载列表数据的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-28 08:13:39 25 4
gpt4 key购买 nike

我在 Swift 中看到的每个 firebase 客户端示例似乎都过度简化了从 Firebase 正确加载数据,现在我已经查看了所有文档和大量代码。我承认我的申请可能有点边缘情况。

我有这样一种情况,每次加载 View Controller 时,我想自动向房间发布一条消息“嘿,我在这里!”并通过典型的观察调用另外加载服务器上的内容。

我认为流程是:1.查看 Controller 负载2.自动发布到房间3.观察childAdded

显然调用是异步的,所以不能保证事情发生的顺序。我试图通过使用完整的处理程序来等待自动发布返回来简化事情,但这会将自动发布的消息加载到我的 TableView 中两次。

    AutoPoster.sayHi(self.host) { (error) in
let messageQuery = self.messageRef.queryLimited(toLast:25).queryOrdered(byChild: "sentAt")
self.newMessageRefHandle = messageQuery.observe(.childAdded, with: { (snapshot) in
if let dict = snapshot.value as? [String: AnyObject] {
DispatchQueue.main.async {
let m = Message(dict, key: snapshot.key)
if m.mediaType == "text" {
self.messages.append(m)
}
self.collectionView.reloadData()
}
}
})
}

值得注意的是,这对于初始加载来说似乎效率很低。我通过使用一个带有计时器的技巧来解决这个问题,该技巧基本上只允许 Collection View 每 .25 秒重新加载一次最大值,并且每次有新数据进入时都会重新启动计时器。有点 hacky,但我想 firebase 的好处证明了 hack 的合理性。

我还尝试在初始加载时观察值事件一次,然后仅在观察 childAdded 之后才观察,但我认为这也有问题,因为无论如何都会调用 childAdded。

虽然我很想发布我尝试过的所有加载方法的代码(并乐于用它更新问题),但我宁愿不调试似乎不起作用的东西,而是让别人帮助概述针对这种情况的推荐流程。同样,目标只是自动发布到我加入对话的房间,然后加载初始数据(我的自动发布应该是最新消息),然后收听传入的新消息。

最佳答案

代替

self.newMessageRefHandle = messageQuery.observe(.childAdded, with: { (snapshot) in 

尝试替换为

let childref = FIRDatabase.database().reference().child("ChildName")
childref.queryOrdered(byChild:"subChildName").observe(.value, with: { snapshot in

关于ios - 在 Firebase 和 Swift 中初始加载列表数据的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43058281/

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