使用Swift中的变量进行Firebase查询

时间:2016-02-27 05:52:23

标签: database swift firebase

我试图从我的Firebase数据集中查找特定的用户图像我将具有唯一显示名称的组用户命名为子项,并将那些名称为lowerCaseName,UID和Image的子项命名为<。登记/> enter image description here

无论如何我可以通过用户查询变量以获取图像吗?我在想http://firebase.com/users/%diplaynames/image但不确定。

3 个答案:

答案 0 :(得分:1)

您的Firebase基本网址是什么?您应该查询看起来像这样的路径:

https://<APP ID HERE>.firebaseio.com/

因此,Firebase的初始化应如下所示:

let fire = Firebase(url: "https://<APP ID HERE>.firebaseio.com/users/<DISPLAYNAME>/image")

或者,您可以这样做:

let fire = Firebase(url: "https://<APP ID HERE>.firebaseio.com")
let imageRef = fire.childByAppendingPath("users").childByAppendingPath("<DISPLAYNAME>).childByAppendingPath("image")

答案 1 :(得分:0)

在Firebase中,您无法检索节点属性的子集。检索节点,或者不是。

如果您有一个只需要检索图像的用例,则应该存储一个只包含这些图像的顶级节点。

userImages
  Charles: base64data
  Zach: base64data

答案 2 :(得分:0)

有几点想法:

虽然您的结构没有任何问题,但您可能需要考虑将节点名称从用户名更改为firebase自动生成的ID。

users
   user_0
    name: Charles
    image: some image
   user_1
    name: Zaddy
    image: another image

有时候数据会发生变化,例如,查尔斯希望将其称为查理。要进行更改,您必须删除Charles节点*,重新添加它,然后更新引用Charles的每个节点。如果您使用自动生成的id(或uid;最佳实践)user_0命名,则只需更新名称:“Charlie”,其他所有内容都将落实到位。

*子名称:节点名称当然可以相同或不同,所以这是一个情境示例。

获取Charles的图像(假设它是base64编码的)并且您想将其添加到imageView

    let ref = Firebase(url:"https://your_app.firebaseio.com/users")
    ref.queryOrderedByChild("name").queryEqualToValue("Charles")
       .observeSingleEventOfType(.ChildAdded, withBlock: { snapshot in

        //snapshot will contain the child key/value pairs
        let base64EncodedString = snapshot.value.objectForKey("image")
        let imageData = NSData(base64EncodedString: base64EncodedString as! String, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters)
        let decodedImage = NSImage(data:imageData!)
        self.myImageView.image = decodedImage

    })