2016-04-08 129 views
0

在火力地堡,我们可以创建一个新的对象,像这样:访问对象的uid火力地堡

Firebase *postRef = [ref childByAppendingPath: @"posts"]; 
NSDictionary *post1 = @{ 
    @"author": @"gracehop", 
    @"title": @"Announcing COBOL, a New Programming Language" 
}; 
Firebase *post1Ref = [postRef childByAutoId]; 
[post1Ref setValue: post1]; 

而这个新的职位可能在通过URL来保存:http://app.firebaseIO.com/posts/$postuid

后来,当用户在上一些UIViewController查看帖子,我们可能要发表评论。然而,为了发表评论,我们需要访问帖子的uid。看来唯一可行的方法是如果我们将uid保存到我们的post对象中?

基本上,最好的做法是将对象的uid存储在其中?

+1

一般来说,Firebase中的uid会引用从authData.uid获得的用户uid。在这种情况下,你问你是否应该将用户uid(也许是发布它的用户的uid)作为post1Ref的子项存储? – Jay

+0

@Jay我更一般地将uid称为唯一标识符。 – Apollo

+0

不要:-)除非您特指通过Firebase身份验证方法分配的authData.uid,否则确实会造成混淆。唯一标识符将被称为父节点或可能是密钥。在这种情况下,答案是否定的,您不需要在节点内存储唯一标识符(密钥),因为它始终可以从snapshot.key获取。当然,值也是snapshot.value。可能有一些特殊情况,可能需要将其存储在节点内部,但通常不会。 – Jay

回答

2

这种情况下的答案是否定的,您不需要在节点内存储唯一标识符(密钥),因为它始终可以从snapshot.key获取。

key:value对的值是从snapshot.value获得的。

可能有一些特殊情况,可能需要将密钥存储在节点内部,但通常不会。

实施例来打印从用户节点

users 
    uid_0 
    name: "Kirk" 
    uid_1 
    name: "Spock" 

和代码

let ref = Firebase(url:"https://your-app.firebaseio.com/users") 
ref.queryOrderedByChild("name").observeEventType(.ChildAdded, withBlock: { snapshot in 
    print("The key: \(snapshot.key)") //the key 
    print("The Value: \(snapshot.value)") //all the values for this key 
    let specificValue = snapshot.value["name"] as! NSString 
    print("Specific value: \(specificValue)") //a specific value 
}) 

注意,在这种情况下,每个用户节点具有uid_x因为它的键中的每个键和值。这个唯一的标识符是从authData.uid获得的。当用户被创建时。传统上,其他节点中的节点密钥将由childByAutoId(或针对非iOS的push())创建。

对于您的问题;根据使用情况,将firebase快照数据存储在字典中通常比较方便,并将这些字典(或类)作为tableView数据源存储在数组中。数组维护顺序。

+0

感谢您的详细解答。 – Apollo