gpt4 book ai didi

ios - Firebase .childAdded 和事件指示器

转载 作者:行者123 更新时间:2023-11-30 12:11:20 24 4
gpt4 key购买 nike

当我在 API 调用之前启动事件指示器并在 API 调用之后停止时,我遇到了问题,但是如果我使用 .childAdded 填充 TableView,则无法正确执行此操作。由于 .childAdded 仅在添加子项时调用,因此我的事件指示器始终在加载。例如:

func parseData() {

self.activityIndicator.startAnimating()

DataService.instance.SOME_DATA.observe(.childAdded, with: { (snapshot) in

if let snapshot = snapshot.value as? Dictionary<String, Any> {
let data = someData(data: snapshot)
self.array.append(data)
}
DispatchQueue.main.async {
self.tableView.reloadData()
self.activityIndicator.stopAnimating()
}
})
}

所以基本上,如果没有任何值,.childAdded 将不会被调用,并且事件指示器永远不会停止,因为它仅在重新加载 tableView 时停止。有人可以建议如何正确地做到这一点吗?非常感谢。

基于建议答案的一些更新:

我会根据聊天应用程序举一个例子,这样会更容易理解。我有以下数据库结构:

user_messages
unique_user_id
unique_user_chat_id
unique_message_1
unique_message_2
unique_message_3
unique_message_4
messages
unique_message_1
text...
unique_message_2
text...
unique_message_3
text...
unique_message_4
text...

我有 2 个 View Controller ,每个 Controller 都有一个 TableView

enter image description here

父 View Controller 获取所有 unique_user_chat_id,当客户端按下所选聊天时,第二个 View Controller 从“消息”对象填充所有子级。所以基本上第二个 View Controller 不需要调用函数 .observeSingleEvent(of: .value 来获取 unique_user_chat_id,只需要在 'messages' 对象中调用 Childs .childAdded 。

最佳答案

正如您观察childAdded,正如您所说,这可能永远不会被调用。

childAdded 更改为 valueChanged 并观察 childAdded。将动画调用添加到 valueChanged

您不应在观察 childAdded 时设置事件指示器,而应仅在获取初始数据时设置。

func fetchData() {

activityIndicator.startAnimating()

DataService.instance.SOME_DATA.observe(.value, with: { (snapshot) in

// Handle current value and stop activity indicator
if let snapshot = snapshot.value as? Dictionary<String, Any> {
let data = someData(data: snapshot)
self.array.append(data)
}

DispatchQueue.main.async {
self.tableView.reloadData()
self.activityIndicator.stopAnimating()

// Observe new childs added
self.observeData()
}
})
}

func observeData() {

DataService.instance.SOME_DATA.observe(.childAdded, with: { (snapshot) in

if let snapshot = snapshot.value as? Dictionary<String, Any> {
let data = someData(data: snapshot)
self.array.append(data)
}

DispatchQueue.main.async {
self.tableView.reloadData()
}
})

}

关于ios - Firebase .childAdded 和事件指示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46017039/

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