【问题标题】:Firebase snapshot returns null when requesting username请求用户名时 Firebase 快照返回 null
【发布时间】:2018-06-02 15:15:08
【问题描述】:

我正在制作 Instagram 克隆,并希望获取用户名以供用户显示。该信息位于 firebase 的数据库部分,我正在尝试通过快照进行操作,但它总是返回。

fileprivate func fetchUser() {
    guard let uid = Auth.auth().currentUser?.uid else { return }


    Database.database().reference().child("users").child(uid).observeSingleEvent(of: .value, with: { (snapshot) in
        print(snapshot.value ?? "")
    }) { (err) in
        print("Failed to fetch user:", err)
    }
}

代码格式的间隔很奇怪,但这就是代码。是我没有让 Childs 正确,还是发生了什么事?

编辑:这里也是 Firebase Db 的快照。Firebase screenshot

【问题讨论】:

  • 您有一些直接在根目录下的用户,还有一些在/users 下。您的代码将只能读取/users 下的代码。解决方案是修复写入此用户数据的代码,将其写入一致的位置。
  • 所以弗兰克,即使我在 /users 下有一个用户,它仍然显示为 null。是否会重写代码以将所有用户置于 /users 下修复它,或者不会?这是我第一次使用 firebase,所以我很菜鸟哈哈
  • 您的数据结构不一致,这使得很难信任任何东西(因为我们不知道您的用户拥有哪个 UID)。看看您是否可以使用uid 的硬编码值重现它,如果可以,请更新您问题中的代码。这样可以更轻松地查看实际发生的情况。
  • 您问题中的代码适用于发布的结构(假设您正在 /users 节点中寻找有效的 uid),因此尚不清楚问题出在哪里。将来,请将您的 Firebase 结构包含为文本,而不是链接或图像。链接打破了会使问题无效的问题。

标签: ios swift firebase firebase-realtime-database firebase-authentication


【解决方案1】:

试试这个:

guard let uid = Auth.auth().currentUser?.uid else { return }
let reference = Database.database().reference()
reference.child("users").child(uid).observeSingleEvent(of: .value, with: { (snapshot) in

    guard let dictionary = snapshot.value as? [String: Any] else { return }

    let username = dictionary["username"] as? String

    print(username ?? "")

}, withCancel: nil)

【讨论】:

  • InstagramClone[71556:9641272] TI​​C 读取状态 [1:0x0]: 1:57 - 您的解决方案返回此错误。 (stackoverflow.com/questions/46352735/…) 这是我在上面找到的
  • @MasonBose 您是否在 AppDelegate 中添加了用于配置 Firebase 的正确行,添加到正确的 .plist 文件中并对用户进行了身份验证?
  • @MasonBose 这个答案工作正常 - 在我自己的项目中测试过,没有返回任何错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
  • 2017-06-25
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
相关资源
最近更新 更多