【发布时间】:2018-02-07 06:58:41
【问题描述】:
在我的 Swift 项目中,我实现了 Firebase 并为我的主 tableView 定义了一个结构。在我的主 TableView 上,我有想要更新并与 firebase 同步的值。 firebase 文档提供了以下代码:
let scoresRef = Database.database().reference(withPath: "scores")
scoresRef.keepSynced(true)
我曾尝试在 viewDidLoad、fetchFunction 和 AppDelegate 上使用 keepSynced 函数,但显然只有当我切换到另一个 viewController 并返回到我的 mainTableView 时,这些值才会更新。
下面我将演示我的代码:
将 firebase 提取到我的 TableView 的函数(包含在 ViewDidLoad 中)和 Bar 是我的结构模型:
func fetchBars(){
let myRef = ref.child("paris")
myRef.keepSynced(true)
myRef.observe(.childAdded, with: { (snapshot) in
guard let bar = Bar.bar(from: snapshot) else {return}
self.bars.append(bar)
self.tableView.reloadData()
})
}
请帮助我解决这个问题,如果可能,请展示示例。
【问题讨论】:
-
你分享的代码有什么问题?它有什么作用?你期望它做什么?
-
@FrankvanPuffelen 代码基本上从 Firebase 获取所有值并将其显示在表格视图中。例如,每个条都将其所有值分配给一个单元格。在那个单元格中,我有不同类型的信息,包括酒吧现在是开放还是关闭。所以我希望这些信息保持新鲜。
-
您在
myRef.observe(.childAdded添加的代码将立即为每个孩子触发,然后在添加孩子时立即触发。不是这样吗? -
@FrankvanPuffelen 是的。但我也想保持现有的儿童数据新鲜。对我的代码有什么建议吗?
-
正如@FrankvanPuffelen 提到的,此代码只会通知您的应用程序 .childAdded 事件。如果您想保持其他数据同步,您还需要包括观察 .childChanged 和 .childRemoved 事件。请参阅“侦听子事件”部分中的 Working With Lists of Data。即添加: myRef.observe(.childChanged... 和 myRef.observe(.childRemoved...
标签: ios swift uitableview firebase firebase-realtime-database