ios - (Swift) Firebase keepSynced(true) 不起作用

标签 ios swift uitableview firebase firebase-realtime-database

在我的 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/

相关文章:

iphone - 如何返回两个自定义的uitableviewcell

swift - 类型的值没有成员 - 在第一个和目标 Controller 中定义

ios - coreData 插入到许多关系

ios - 如何获取原型(prototype)单元格的 nibWithNibName?

ios - 正确使用 dispatch_async (GCD) 调用

ios - 如何在 ios 的 swift 语言中为具有其他类型输入的变量设置 setter?

ios - 从新 URL 播放视频而不创建新的 AVPlayer 对象

ios - UItableViewCell 问题的高度

ios - UITableView 在使用 Swift 中的 Master Detail App 滚动之前不会重新加载

javascript - iOS:禁用弹跳滚动但允许正常滚动