2016-04-08 185 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