首页 > 解决方案 > 如果我只是特别需要一个,为什么要获取所有用户数据?

问题描述

我正在尝试获取特定用户的图像 url,但我最终为我刚刚随机创建的两个用户获取了它。我只需要一个用户 ImageUrl,而不是两个。

func retrieveTheImage() {

    let fullName = Database.database().reference(withPath: "User")
    fullName.queryOrdered(byChild: "uid").queryEqual(toValue: "ghD0lYZV1QOeJ2giUc3fNVxsLAV2")

    fullName.observeSingleEvent(of: .value) { (snapShot: DataSnapshot) in

        for child in snapShot.children {
            if let snap = child as? DataSnapshot {
                if let snapShotValue =  snap.value as? [String: String] {

                    let imageUrl = snapShotValue["ImageUrl"]!
                    print(imageUrl)


                    let storage = Storage.storage()
                    var reference: StorageReference!
                    reference = storage.reference(forURL: imageUrl)
                    reference.downloadURL { (url, error) in
                        let data = NSData(contentsOf: url!)
                        let image = UIImage(data: data! as Data )
                        self.pimageView.image = image
                    }
                }
            }
        }
    }
}

Firebase 结构

{
    "User" : {
        "Ncat5zlIHGQxRHEwGSX0vgspyE02" : {
            "FirstName" : "other",
            "ImageUrl" : "someUrl",
            "LastName" : "other",
            "uid" : "Ncat5zlIHGQxRHEwGSX0vgspyE02"
        },
        "ghD0lYZV1QOeJ2giUc3fNVxsLAV2" : {
            "FirstName" : "other",
            "ImageUrl" : "someUrl",
            "LastName" : "other",
            "uid" : "ghD0lYZV1QOeJ2giUc3fNVxsLAV2"
        }
    }
}

标签: iosswiftfirebasefirebase-realtime-database

解决方案


这条线什么都不做:

fullName.queryOrdered(byChild: "uid").queryEqual(toValue: "ghD0lYZV1QOeJ2giUc3fNVxsLAV2")

对 API 的调用会query...返回一个新的 Query 对象,因此您需要坚持下去:

let fullName = Database.database().reference(withPath: "User")
let query = fullName.queryOrdered(byChild: "uid").queryEqual(toValue: "ghD0lYZV1QOeJ2giUc3fNVxsLAV2")

query.observeSingleEvent(of: .value) { (snapShot: DataSnapshot) in

推荐阅读