我制作了以下功能,用户可以互相关注。问题是它没有按照应有的方式使用。在用户撰写帖子时,它将在此引用下保存在我的Firebase数据库中:
FIRDatabase.database().reference().child("feed-items").childByAutoId()
Feed-items是所有帖子的所在。我现在正在更改它,所以当用户发布某些内容时,它将保存在此处:
FIRDatabase.database().reference().child("Users").child(UserID).child("Posts").childByAutoId()
我这样做是因为它以某种方式告诉我,只显示您在我的应用Feed中关注的人的帖子会更容易。
目前我收到了我的Feed的所有帖子(来自Feed-items),如下所示:
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
等。等
我的问题是: 如何将其更改为仅显示我关注的人的帖子?
对不起,很长的帖子
答案 0 :(得分:0)
假设您将关注者列表保存为其他父节点中的字典,如下所示: -
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},
....
},
} */
这个想法是每当您当前用户关注的用户发布帖子时。该帖子的 autoID 会附加在 postsToShowToUser / userID 中。
也就是说,如果 userID2 会发帖,那么系统会调用该帖子的autoID在所有用户 postsToShowToUser / userID 后面跟随 userID2
PS: - 我强烈建议您将帖子详细信息移出post
部分。使它成为一个单独的父节点,由多个postAutoID组成,并将数据作为值发布。它可能会在以后派上用场,也可以避免嵌套数据,这可以帮助您浏览数据库。