如何使用户看到他们正在关注帖子的用户显示在帖子供稿中

时间:2019-07-13 20:31:47

标签: swift firebase-realtime-database

我正试图允许用户看到他们关注的用户的信息。问题在于,订阅源中仅显示已登录的用户帖子。我在Firebase上的以下节点如下所示:

关注收藏

Following
     uid
        userA
        userB

帖子集

Post
     uid
        images
              auto.id
                     caption
                     imageURL

视图控制器

class WorkplsViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {


@IBOutlet weak var PostTable: UITableView!

var PostList = [PostCapModel]()

var ref = Database.database().reference()

override func viewDidLoad() {
    super.viewDidLoad()

    PostTable.dataSource = self
    PostTable.delegate = self

    ref.child("Post").child("\(Auth.auth().currentUser!.uid)").child("images").observe(.childAdded) { (snapshot) in
        if let postDict = snapshot.value as? [String : AnyObject] {
            let Caption = postDict["imgCaption"] as? String
            let PostMedia = postDict["imgUrl"] as? String                
            self.PostList.append(PostCapModel(PostCaption: Caption, PostImage: PostMedia))
            self.PostTable.reloadData()
        }
    }

}

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return PostList.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "PostCell", for: indexPath) as! PostCellTableViewCell

    cell.CellLabel.text = PostList[indexPath.row].PostCaption
    cell.PostPic.sd_setImage(with: URL(string: PostList[indexPath.row].PostImage!))
    self.PostTable.reloadData()
     return cell
                }

1 个答案:

答案 0 :(得分:0)

您可能需要将Posts节点重组为以下形式:

帖子

Posts
   postID
        author (uid)
        images
             imageID
                    caption
                    imageURL

这将使您可以将侦听器附加到常规Posts节点上,而不仅仅是特定用户的节点上。

ref.child("Posts").child(postID).observe(.childAdded) { (snapshot) in
      // Do Something  
}

将来,如果您想查看他们正在关注的用户的帖子列表,则可以在Users节点下创建一个名为timeline的分支,并且只要他们关注的人发布内容,使用函数将postID添加到每个关注者的时间轴(以及一些元信息,例如用于排序的时间戳)。

Users
   userID
        timeline
             postID1
                    timestamp (or some other information that doesn't change)
             postID2
                    timestamp
             postID3
                    timestamp

然后,您可以将侦听器附加到特定用户的时间轴,并从他们关注的人那里获取所有帖子。

ref.child("Users").child(userID).child("timeline").observe(.childAdded) { (snapshot) in
      // Get all posts from the Post node now that you have the postID's
}