2016-09-20 12 views
0

私はすべての投稿を取得し、すべてをuitableviewcontrollerで表示しているコードをいくつか持っています。 firebaseからの投稿のすべてを取得しているコードは、このです:現在のユーザーからの投稿のみを表示する - firebase swift

viewDidLoad { 
dbRef = FIRDatabase.database().reference().child("feed-items") 
    startObersvingDB() 

} 

func startObersvingDB() { 
    dbRef.observeEventType(.Value, withBlock: { (snapshot: FIRDataSnapshot) in 
     var newUpdates = [Sweet]() 

     for update in snapshot.children { 
      let updateObject = Sweet(snapshot: update as! FIRDataSnapshot) 
      newUpdates.append(updateObject) 

     } 

     self.updates = newUpdates 
     self.tableView.reloadData() 


    }) { (error: NSError) in 
     print(error.description) 
    } 
} 

どのように私は特定のユーザ名からアップデートを取得するためにその部分を修正することができますか? firebaseでの私の構造は次のようにされていますので、コードが実行すべきか、byUsername文字列をフェッチしている

feed-items { 
    unique-user-id { 
      post: "This is a post" 
      byUsername: "MyUser" 
    } 
} 

- 私はちょうどそれを行うために自分のコードを更新する方法を見つけ出すことはできません。私はあなたを収集することができるものから

スウィフト3

func startObersvingDB() { 
FIRDatabase.database().reference().child("feed-items").queryOrdered(byChild: "byUsername").queryEqual(toValue: "MyUser").observe(.value, with: { (snapshot: FIRDataSnapshot) in 
    var newUpdates = [Sweet]() 

    for update in snapshot.children { 
     let updateObject = Sweet(snapshot: update as! FIRDataSnapshot) 
     newUpdates.append(updateObject) 

     } 

     self.updates = newUpdates 
     self.tableView.reloadData() 


     }) { (err) in 
     print(err!.localisedDescription)  
     } 
    } 

スウィフト2

func startObersvingDB() { 
FIRDatabase.database().reference().child("feed-items").queryOrderedbyChild("byUsername").queryEqualtoValue("MyUser").observeSingleEventOfType(.Value, withBlock: { (snapshot: FIRDataSnapshot) in 
    var newUpdates = [Sweet]() 

    for update in snapshot.children { 
     let updateObject = Sweet(snapshot: update as! FIRDataSnapshot) 
     newUpdates.append(updateObject) 

    } 

    self.updates = newUpdates 
    self.tableView.reloadData() 


    }) { (error: NSError) in 
     print(error.description) 
    } 
    } 

答えて

3

:-)私を助けることを願ってfeed-itemsのすべての子をフェッチするfor update in snapshot.children {...}キーを使用することはありませんunique-user-idは実際に特定のユーザーIDをフェッチします。あなただけに、ユーザーが自分のアイテムを表示できるようにdatabase ruleを書くためにどちらか持っているか、次の方法(スウィフト3構文)を使用することができます:FIRAuthから

1)フェッチユーザーID:

if let user = FIRAuth.auth()?.currentUser { 
    for profile in user.providerData { 
     providerDataID = profile.providerID // save UID in variable e.g. providerDataID 
     // fetch other FIRAuth stuff 
    } 

2 )あなたのUIDを持つ唯一のフィード項目を取得します。

ref.child("feed-items").child(providerDataID).observeSingleEvent(of: .value, with: { (snapshot) in  
    if let userInfoDict = snapshot.value as? NSDictionary { 
    // get values from the proper providerDataID ONLY 
} 

オルタナティブ: それはあなたのユーザーのための試合ですが、それは取るならば、あなたのコードチェック、すべての子どものUIDでforループを行うときあなたが大規模なデータベースを持っている場合はいくつかの帯域幅

0

されている - これを試してみてくださいあなたたちは

+0

私はsnapshot.childrenだけを探すので、一意のユーザーIDは「スキップ」されていますが、誰かが既に私の答えを見つけました。 –

関連する問題