Ios 显示您正在跟踪的用户的帖子-swift

Ios 显示您正在跟踪的用户的帖子-swift,ios,swift,uitableview,firebase,firebase-realtime-database,Ios,Swift,Uitableview,Firebase,Firebase Realtime Database,我做了一个如下功能,用户可以互相关注。问题是它没有得到应有的使用。当用户正在写文章时,它将保存在我的Firebase数据库中的以下引用下: FIRDatabase.database().reference().child(“提要项”).childByAutoId() feed项是所有post所在的位置。但我现在正在改变这一点,因此当用户发布内容时,它将保存在此处: FIRDatabase.database().reference().child(“用户”).child(用户ID).child(“

我做了一个如下功能,用户可以互相关注。问题是它没有得到应有的使用。当用户正在写文章时,它将保存在我的Firebase数据库中的以下引用下:

FIRDatabase.database().reference().child(“提要项”).childByAutoId()

feed项是所有post所在的位置。但我现在正在改变这一点,因此当用户发布内容时,它将保存在此处:

FIRDatabase.database().reference().child(“用户”).child(用户ID).child(“帖子”).childByAutoId()

我这样做是因为它告诉我,在我的应用程序提要中只显示你关注的人的帖子会更容易

目前,我收到的所有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中调用startTobservingDB()

如果您想查看我的
Sweet
struct,请点击这里:

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
等等等等

我的问题是: 我如何将其更改为仅显示我跟踪的人的帖子?


抱歉发了这么长的帖子

假设您将追随者列表保存为其他父节点中的字典,如下所示:-

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将发布一篇文章,那么将调用在所有跟踪userID2的用户postsToShowToUser/userID中追加该文章的autoID


PS:-我强烈建议您将帖子详细信息移出
post
部分。使其成为一个单独的父节点,由多个postAutoID作为键组成,其中PostData作为值。以后它可能会派上用场,也可以避免嵌套数据,这将帮助您在数据库中导航。

我不太确定我是否理解;您的意思是,每当用户发表帖子时,它都应该检查谁在跟踪该用户,然后将该帖子添加到跟踪该用户的所有用户中?:-)这是不可能的,;当一个用户发布某个内容时,它会出现在他们的个人资料中——那么所有当前用户的追随者都会进入一个数组并检查帖子?我真的不知道,但是在多个地方添加用户帖子会占用一些空间,对吗?基本上允许用户访问另一个用户配置文件不是一个好主意。阅读我在PS中的建议。也可以给出发布用户的用户ID,而不是postsToShowToUser中的true。一旦你有了帖子的postID和userID。现在,您可以在数据库的post部分导航postID的post详细信息,不允许用户访问其他用户帐户。我已相应地更新了我的答案。至于在每个关注者中添加postID,你的用户只需发表一篇文章,然后你就必须循环浏览每个用户的帖子,然后再浏览他们的帖子,从那里你就可以获得最近每篇文章的帖子详细信息。这不是一个坏主意,但你将允许一个随机追随者访问你的其他用户的个人详细信息,而且加载所有详细信息和循环需要很长时间,你的应用程序用户可能不想等待那么长时间来阅读他们的朋友发来的帖子。。。!此外,您不必担心在发布帖子或网络线程将帖子附加到关注者节点时网络连接丢失。由于这些调用是异步的,并首先加载到本地缓存中,因此当用户重新联机时,剩余的追加ID将开始追加。:)Happy CodingIt不幸没有:(我尝试的是将currentUser跟踪的所有用户放入一个数组中。然后我迭代该数组以从该数组中的用户获取所有帖子。起初它似乎工作得很好-它显示了需要的帖子,但每当currentUser单击由(比如…)创建的帖子的like按钮时John Ryan,John Ryan的所有帖子都被复制了?我不知道为什么:(