gpt4 book ai didi

swift - Firebase 从一个数据库而不是另一个 Swift 返回数据

转载 作者:行者123 更新时间:2023-11-28 06:11:55 24 4
gpt4 key购买 nike

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

enter image description here

我使用 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 key 。它返回所有数据库条目的字典,除了最近的(或任何最近的)条目。然后我在网站上检查以确保数据确实存在于数据库中,重新加载页面,果然它就在那里。

这意味着 Firebase SDK observeSingleEvent 一定是问题所在。但是,我只是想不通为什么它可以对数据库的一个部分进行快速更新,而对另一个部分却不行。事实上,用户部分包含更多信息并且更大!那么,如果有什么应该更慢的呢?发生这种情况有什么原因吗?

最佳答案

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

关于swift - Firebase 从一个数据库而不是另一个 Swift 返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46306454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com