2016-02-27 27 views
1

我试图从我的Firebase数据集中查找特定用户图像我将具有唯一显示名称的组用户命名为子组和名称,lowerCaseName,UID和图像。
enter image description here在Swift中使用变量进行Firebase查询

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

+0

今后,请从网站,而不是将图像复制和过去的文本结构。它使我们不必重新输入。 :-) – Jay

回答

1

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

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

所以你火力地堡的初始化应该是这样的:

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") 
0

在Firebase,您无法检索节点属性的子集。要么检索节点,要么不是。

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

userImages 
    Charles: base64data 
    Zach: base64data 
0

一对夫妇的想法:

虽然没有什么不对您的结构,你可能要考虑改变了用户的节点名称命名的火力点自动生成的ID。

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

有时数据会改变,比如说查尔斯想叫查理。要做出这样的改变,你必须删除Charles节点*,重新添加它,然后更新每个指向Charles的节点。如果您使用自动生成的id(或uid;最佳实践)user_0命名它,则只需更新名称:“Charlie”,其他所有内容都将落实到位。

*孩子的名字:和节点名称可以是相同或不同的,所以这是一个情景化的例子。

要得到查尔斯的图像(假设它的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 

    })