在我的 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()
})
}
请帮助我解决这个问题,如果可能,请展示示例。
最佳答案
我以前被这个问题困扰了很长时间。我几乎失去了希望,并认为这确实是与 Firebase 相关的问题。
原因您正在检索缓存数据 而不是 更新的服务器数据很可能是因为您在 Firebase 控制台中设置的安全规则(或者您没有设置的安全规则!)。只需在 myRef
设置正确的规则即可允许从此数据库引用中读取(类似于 ".read" = true
的内容),您就可以开始了!
请注意 ".read" = true
允许 任何人在此引用读取数据。如果这不是所需的行为,那么您应该在方便时更改安全规则。只要根据您设置的规则在您的 iOS 应用程序中允许读取,那么 keepSynced(_:)
方法将更新数据而不是检索缓存的数据。
关于ios - (Swift) Firebase keepSynced(true) 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48657724/