访问对象的uid火力地堡
在火力地堡,我们可以创建一个新的对象,像这样:访问对象的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存储在其中?
这种情况下的答案是否定的,您不需要在节点内存储唯一标识符(密钥),因为它始终可以从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数据源存储在数组中。数组维护顺序。
感谢您的详细解答。 – Apollo
一般来说,Firebase中的uid会引用从authData.uid获得的用户uid。在这种情况下,你问你是否应该将用户uid(也许是发布它的用户的uid)作为post1Ref的子项存储? – Jay
@Jay我更一般地将uid称为唯一标识符。 – Apollo
不要:-)除非您特指通过Firebase身份验证方法分配的authData.uid,否则确实会造成混淆。唯一标识符将被称为父节点或可能是密钥。在这种情况下,答案是否定的,您不需要在节点内存储唯一标识符(密钥),因为它始终可以从snapshot.key获取。当然,值也是snapshot.value。可能有一些特殊情况,可能需要将其存储在节点内部,但通常不会。 – Jay