如果只需要一个用户数据,为什么要获得所有用户数据?

时间:2019-08-12 20:10:24

标签: ios swift firebase firebase-realtime-database

我试图获取特定用户的图片网址,但最终却为我刚刚随机创建的两个用户获取了图片网址。我需要的只是一个用户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"
        }
    }
}

1 个答案:

答案 0 :(得分:3)

此行不执行任何操作:

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

query... API的调用将返回一个新的Query对象,因此您需要继续执行该操作:

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

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