【问题标题】:retrieve only favoured posts from firebase仅从 firebase 检索喜欢的帖子
【发布时间】:2017-05-30 17:37:22
【问题描述】:

我只想从 firebase 数据库中检索我喜欢的帖子。

以下是我的数据。我希望该帖子被点赞的用户仅在该帖子被该用户点赞时才显示该帖子。

我已经从 firebase 检索数据,但它会显示所有帖子,而不仅仅是喜欢的帖子。

下面的这段代码是我正在使用的,它的工作原理是如果我点击喜欢它会显示数据,如果我不喜欢它就不会显示数据,但这是显示所有数据。

        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")
    }
})
}

【问题讨论】:

    标签: swift database firebase firebase-realtime-database


    【解决方案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")
                     }
                })
            }
    

    所以,您的主要问题是您引用所有帖子,而不是特定帖子。

    希望你明白了。

    【讨论】:

    • 是的,谢谢@VladPulichev。它以某种方式起作用,我理解您的意思,我脑海中的问题是从用户/收藏夹中拉出只会降低发布键,因此您的解释确实很有帮助。我遇到的唯一问题是,它现在似乎拉下正确的数据,因为帖子只喜欢它在控制台中显示,但它不像拉下所有数据时那样显示到我的表格单元格中。我用一张显示控制台和功能的图片编辑了我的问题。
    • @TonyMerritt 您需要获取包含所有需要帖子的数据数组。与完成处理程序类似的函数。然后更新表格视图。但我想我已经回答了主要问题:)
    • 我想我已经准备好了,我可能需要通读 cod 并查看我需要编辑的地方。就像我说的那样,它适用于所有数据。感谢您抽出宝贵时间@Vlad....您肯定为我回答了这个问题..
    • 感谢您对@VladPulichev 的帮助,我重构了我的代码以调用表重新加载并使其正常工作,这一切都感谢您。非常感谢您的帮助.......
    • @TonyMerritt 很高兴听到它:)
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多