【问题标题】:Issue when trying to retrieve data from Firebase with Swift 3尝试使用 Swift 3 从 Firebase 检索数据时出现问题
【发布时间】:2017-02-20 12:18:50
【问题描述】:

我正在尝试从我的 Firebase 数据库中检索数据。我使用 JSON 来获取数据。使用 SwiftyJSON 库。

这是我的代码:

func retrieveUserDatabaseAdress(userID: String) {

    let userRef = ref.child("users").child(userID)

    UIApplication.shared.isNetworkActivityIndicatorVisible = true
    userRef.observeSingleEvent(of: .value, with: { snapshot in

        let json = JSON(snapshot)
        print("test")
        self.address = json["address"].stringValue
        UIApplication.shared.isNetworkActivityIndicatorVisible = false

    }) { error in
        print(error.localizedDescription)
    }
}

这是我的数据库层次结构

-users  
---S4KaKn5Qz4bDDha57DMLcnaCHn22
-------address: ...
-------email: ...
-------name: ...
-------tel: ...

问题:它总是检索一个 nil 值。另外,print("test") 没有被执行。

我检查了用户是否已登录以获取读取规则:没关系。 我也尝试了其他方法,但不起作用。 我的 Firebase 数据库似乎配置正确,因为我可以写入数据……但无法读取数据……

【问题讨论】:

  • 是的,我已经使用了它,它工作正常。我也尝试过不使用 JSON,但它不起作用。
  • 将 JSON 函数中的参数作为 snapshot.children 传递
  • 请用您建议的代码写一个anwser! ;)
  • @greenpoisononeTV 删除块中的所有内容,除了行中的快照并写下:let dictionary = snapshot.value as! [Sting: Any] 然后打印字典并告诉我它是否显示一些数据。
  • 还是不行……返回零。

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


【解决方案1】:

首先将数据库的根路径作为“用户”传递。
这段代码在我的数据库中运行良好。它可能适用于您的情况。你应该试试:)

let childRef = FIRDatabase.database().reference(withPath: "users")

        childRef.observe(.value, with: { snapshot in

            for item in snapshot.children {

                 let json = JSON(item)
                print(json)

            }

        })

【讨论】:

    【解决方案2】:

    这应该可行:

    userRef.observeSingleEvent(of: .value, with:  { (snapshot) in
        if let value = snapshot.value as? [String: AnyObject] {
            let json = JSON(value)
            print(json)
        } else {
            // No value
        }
    }, withCancel: { (error) in
        print(error)
    })
    

    【讨论】:

    • 打印什么?
    • 您是否正确调用了您的函数?尝试在observeSingleEvent之外打印一些东西@
    • 当我在外面打印一些东西时它可以工作:我在 observeSingleEvent 的开头和结尾打印了“开始”和“停止”...这是有效的。但所有打印在 @ 987654324@ 没有被执行,这个返回 nil...太奇怪了!
    • 好的,你确定id 中有一些东西作为参数传递吗?尝试将此行 let userRef = ref.child("users").child(userID) 更改为此 let userRef = ref.child("users") 并打印 snapshot
    • 打印不在observeSingleEvent 中执行!我无法打印像“OK”这样的字符串值,但它什么也不打印。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 2017-04-17
    • 2021-02-23
    • 1970-01-01
    相关资源
    最近更新 更多