【问题标题】:Firebase returning data from one database but not the other SwiftFirebase 从一个数据库返回数据,但不是从另一个 Swift
【发布时间】:2018-02-28 14:15:23
【问题描述】:

所以我的根数据库中有两个子部分,users 和 userSelfies

我使用 users 部分来存储头像的 id,而 userSelfies 部分用来存储实际的下载链接。 我做了一个通用函数来从数据库中的任何路径检索数据。它看起来像这样:

static func getDatabaseEntry(path: String, key: String, completionHandler: @escaping (_ return: AnyObject?, _ error: String?) -> Void) {

    databaseReference.child(path).observeSingleEvent(of: .value, with: { (snapshot) in
        //print("snapshot: ", snapshot)


        dump((snapshot.value as? [String: AnyObject]))

        if let value =  (snapshot.value as? [String: AnyObject])?[key] {
            print("unwrapped snapshot dict value from key: ", value)

            completionHandler(value,  nil)

        }else{
            print("no value for key \(key) so setting return as nil")
            completionHandler(nil,  nil)

        }

    }) { (error) in
        print(error.localizedDescription)
        completionHandler(nil,  error.localizedDescription)


    }


}

现在由于一些奇怪的原因,在数据库的“用户”部分使用此函数时,它按预期返回,延迟了几毫秒。然而,当使用这个完全相同的函数和不同的路径参数导致 userSelfies 下载链接时,该函数返回 nil。我已经在快照上尝试了 dump(),我手动尝试找到自拍 ID 密钥。它返回所有数据库条目的字典,除了最近的(或任何最近的)条目。然后我在网站上检查以确保数据确实存在于数据库中,重新加载页面,果然它在那里。

这意味着 Firebase SDK observeSingleEvent 一定是问题所在。但是,我只是无法弄清楚为什么它会为数据库的一个部分工作和快速更新,而不是另一部分。实际上,用户部分包含更多信息并且更大!那么,如果有什么应该更慢的呢?发生这种情况有什么原因吗?

【问题讨论】:

  • 请有人帮助我已经尝试了 12 个小时的一切......我什至尝试切换到正常观察并移除手柄,但无法移除手柄 firebase 似乎坏了

标签: swift firebase firebase-realtime-database


【解决方案1】:

呃。一天后,我想通了。非常感谢 firebase 文档对此进行了解释。 因为 firebase 将对本地缓存的侦听计为一次观察,所以尝试在侦听完成后立即移除侦听器是行不通的,因为它没有第二次机会从实际云中读取。因此,只有在离开场景或有足够时间完全查询云的情况下才移除侦听器。但是,如果缓存的数据与服务器数据相同,那么它就不会“观察”服务器数据,它只会对缓存的数据进行一次观察,因此只会有一个观察事件。 在这篇文章的帮助下,我设法弄清楚了最后一点:What actually happens when persistence is enabled in Firebase?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    相关资源
    最近更新 更多