显示您关注的用户的post – swift
我做了一个以下function,用户可以互相关注。 问题是它没有按照应有的方式使用。 在用户撰写post时,它将在此引用下保存在我的Firebase数据库中:
FIRDatabase.database().reference().child("feed-items").childByAutoId()
所有post都是Feed-items。 我现在正在更改它,所以当用户发布某些内容时,它将保存在此处:
FIRDatabase.database().reference().child("Users").child(UserID).child("Posts").childByAutoId()
我这样做是因为它以某种方式告诉我,只显示您在我的应用Feed中关注的人的post会更容易。
目前,我收到了我的Feed(来自Feed-items)的所有post,如下所示:
func startObersvingDB() { FIRDatabase.database().reference().child("feed-items").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.reverse() self.tableView.reloadData() }) { (error: NSError) in print(error.description) } }
然后我在viewDidLoad中调用startObservingDB()。
如果你想在这里看到我的Sweet
结构,它是:
import Foundation import FirebaseDatabase import FirebaseAuth import UIKit struct Sweet { let key: String! let content: String! let addedByUser: String! let profilePhoto: String! let itemRef: FIRDatabaseReference? init (content: String, addedByUser: String, profilePhoto: String!, key: String = "") { self.key = key self.content = content self.addedByUser = addedByUser self.profilePhoto = profilePhoto self.itemRef = nil } init (snapshot: FIRDataSnapshot) { key = snapshot.key itemRef = snapshot.ref path = key if let theFeedContent = snapshot.value!["content"] as? String { content = theFeedContent } else { content = "" } if let feedUser = snapshot.value!["addedByUser"] as? String { addedByUser = feedUser } else { addedByUser = "" } if let feedPhoto = snapshot.value!["profilePhoto"] as? String! { profilePhoto = feedPhoto } else { profilePhoto = "" } } func toAnyObject() -> AnyObject { return ["content":content, "addedByUser":addedByUser, "profilePhoto":profilePhoto!] } }
在我的TableViewController中,我使用它来显示自定义单元格中的名称等:
var update = updates[indexPath.row] cell.nameLabel.text = update.addedByUser
等等
我的问题是: 如何将其更改为仅显示我关注的人的post?
对不起,很长的post
假设您将关注者列表保存为其他父节点中的字典,如下所示: –
user_followed_by :{ userID2 : { userID1 : true, userID5 : true, userID6 : true, userID12 : true, userID99 : true, } } users :{ userID2 :{ post :{ postAutoID1 : {...}, postAutoID2 : {...}, ... } } } postsToShowToUser :{ userID1 : { postAutoID1 : true, //These are the post's autoID's of all the users whom // your current user is following postAutoID5 : true, postAutoID3 : true, }, } /* // If you choose to declare a separate section of the post Details in your Database. posts_Of_The_User :{ userID1 : { postAutoID1 : {...//DETAILS}, postAutoID2 : {...//DETAILS}, postAutoID3 : {...//DETAILS}, .... }, } */
这个想法是,只要当前用户关注的用户发布post。 该post的autoID被附加在postsToShowToUser / userID中 。
也就是说,如果userID2将发布post,则将进行调用以将该post的autoID附加到跟随userID2的所有用户postsToShowToUser / userID中。
PS: –我强烈建议您将post详细信息移出post
部分。 使它成为一个单独的父节点,由多个postAutoID组成,并将数据作为值发布。 它可能会在以后派上用场,也可以避免嵌套数据,这将有助于您浏览数据库。