对于我的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()
})
}
请帮我解决这个问题,如有可能,请举例说明。
答案 0 :(得分:1)
我以前一直坚持这个问题很长一段时间。我几乎失去了希望,并认为这是合法的Firebase相关问题。
您正在检索缓存数据而不是更新的服务器数据的原因很可能是因为您在Firebase控制台中设置的安全规则(或者您没有!)。只需在myRef
设置正确的规则,允许从这个数据库引用中读取(".read" = true
行),你就可以了!
请注意,".read" = true
允许任何人读取此引用的数据。如果这不是所需的行为,那么您应该在方便时更改安全规则。只要您的iOS应用程序允许根据您设置的规则进行阅读,keepSynced(_:)
方法将更新数据而不是检索缓存数据。