我正试图允许用户看到他们关注的用户的信息。问题在于,订阅源中仅显示已登录的用户帖子。我在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
}
答案 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
}