2017-05-30 36 views
0

我想檢索只有我從firebase數據庫中收到的帖子。從firebase檢索唯一受歡迎的帖子

下面是我的數據。我希望這位喜歡帖子的用戶只在該帖子被該用戶喜歡時才顯示該帖子。

我已經從firebase中檢索數據,但它會顯示所有帖子,而不僅僅是最喜歡的帖子。

enter image description here

下面這段代碼是什麼我使用和它的作品,因爲它顯示的數據,如果我打一樣和不一樣,如果我不同,但是這正顯示出所有數據。

 DataService.ds.REF_USER_CURRENT.observeSingleEvent(of: .value, with: { (snapshot) in 

      if snapshot.hasChild("favourite") { 

       print("true Favourits exist") 


    DataService.ds.REF_POSTS.observe(DataEventType.value, with: { (snapshot) in 
     self.posts = [] 

     if let snapshot = snapshot.children.allObjects as? [DataSnapshot] { 
      for snap in snapshot { 
       print("SNAP: \(snap)") 
       if let postDict = snap.value as? Dictionary<String, AnyObject> { 
        let key = snap.key 
        let post = Post(postKey: key, postData: postDict) 
        self.posts.append(post) 
       } 
      } 
     } 
     self.tableView.reloadData() 

     }) 
      }else { 
       print("Tony: Couldnt get the data") 
      } 

    }) 
} 

下編輯在這裏與VLADS解答>>>>>>>

DataService.ds.REF_USER_CURRENT.observeSingleEvent(of: .value, with: { (snapshot) in 

     if snapshot.hasChild("favourite") { 


    let refToUser = DataService.ds.REF_USER_CURRENT // <- your userId 
    refToUser.child("favourite").observeSingleEvent(of: .value, with: { snapshot in 
     let value = snapshot.value as? NSDictionary 
     let postsIds = value?.allKeys as! [String] 

     for postId in postsIds { 
      let refToPost = Database.database().reference(withPath: "posts/" + postId) 
      refToPost.observeSingleEvent(of: .value, with: { snapshot in 
       if snapshot.exists() { 
       self.notAddedLabel.isHidden = true 
       print("true Favourits exist") 


//  refToPost.observe(DataEventType.value, with: { (snapshot) in 
     self.posts = [] 

     if let snapshot = snapshot.children.allObjects as? [DataSnapshot] { 
      for snap in snapshot { 
       print("SNAP: \(snap)") 
       if let postDict = snap.value as? Dictionary<String, AnyObject> { 
        let key = snap.key 
        let post = Post(postKey: key, postData: postDict) 
        self.posts.append(post) 
       } 
      } 
     } 
     self.tableView.reloadData() 

//   }) 
      }else { 
       self.notAddedLabel.isHidden = false 
       print("Tony: Couldn't get the data") 
       } 
      }) 
     } 
     }) 
     }else { 
      print("Tony: No Favs added, couldn't get the data") 
    } 
}) 
} 

enter image description here

回答

1

First step:favourite節點,並得到所有帖子的ID:

let refToUser = FIRDatabase.database().reference(withPath: "Users").child(userId) // <- your userId 
refToUser.child("favourite").observeSingleEvent(of: .value, with: { snapshot in 
     if let value = snapshot.value as? NSDictionary 
     let postsIds = value.allKeys as! [String] 

     // Second step: fetch every post 
     for postId in postsIds { 
      let refToPost = FIRDatabase.database().reference(withPath: "posts/" + postId) 
      refToPost.observeSingleEvent(of: .value, with: { snapshot in 
       if snapshot.exists() { 
        // do whatever you want 
        // snapshot now is your post data 
       } else { 
        print("error") 
       } 
      }) 
     } 

所以,你的主要問題,你參考所有職位,而不是T. o特定的。

希望你有想法。

+0

是的,謝謝@VladPulichev。它的工作方式和我明白你的意思,我腦海中的問題是從用戶/收藏夾拉只會帶來一個帖子的關鍵,所以你的解釋真的幫助。我遇到的唯一問題是,現在似乎只需要將正確的數據拉下來就可以了,但只有在控制檯中顯示此消息時才顯示此消息,但它不會顯示在我的表格單元格中,就像在將所有數據拉下時一樣。我已經用顯示控制檯的圖片和編輯的功能編輯了我的問題。 –

+0

@TonyMerritt你需要獲得所有需要的職位數據。像完成處理函數一樣。然後更新表格視圖。但我認爲我已經回答了主要問題:) –

+1

我認爲我已經有了,我可能需要閱讀鱈魚,看看我需要編輯。就像我說的那樣,它可以處理所有數據。謝謝你的時間@Vlad ....你肯定回答了我的問題.. –