tables realtime query datasnapshot consultas ios swift uitableview firebase firebase-database

query - realtime database ios



Mostrar mensajes de los usuarios a los que sigue-swift (1)

He hecho una siguiente función donde los usuarios pueden seguir el uno al otro. El problema es que no se está utilizando como debería. En el momento en que un usuario escribe una publicación, se guardará en mi base de datos de Firebase con esta referencia:

FIRDatabase.database().reference().child("feed-items").childByAutoId()

Los feed-items son donde están todas las publicaciones. Sin embargo, ahora estoy cambiando eso, así que cuando un usuario está publicando algo, se guardará aquí:

FIRDatabase.database().reference().child("Users").child(UserID).child("Posts").childByAutoId()

Lo hago porque de alguna manera me dice que sería más fácil mostrar solo las publicaciones de las personas que sigues en mi feed de aplicaciones.

En este momento estoy recibiendo todas las publicaciones para mi feed (de feed-items) como esta:

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) } }

Y luego invoco startObservingDB () en viewDidLoad.

Si quieres ver mi Sweet struct aquí está:

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!] } }

Y en mi TableViewController estoy usando esto para mostrar el nombre, etc. en la celda personalizada:

var update = updates[indexPath.row] cell.nameLabel.text = update.addedByUser

etcétera etcétera.

Mi pregunta es: ¿cómo puedo cambiar eso para mostrar solo las publicaciones de las personas que estoy siguiendo?

Perdón por la larga publicación


Suponiendo que está guardando su lista de seguidores como un diccionario en otro nodo padre como este: -

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}, .... }, } */

La idea es que cada vez que un usuario a quien su usuario actual sigue haga una publicación. El autoID de esa publicación se adjunta en el mensaje postsToShowToUser / userID .

Es decir, si userID2 hará una publicación, se realizará una llamada para agregar el ID automático de esa publicación en todos los usuarios postsToShowToUser / userID que estén siguiendo al ID de usuario2 .

PD: - Te sugiero encarecidamente que muevas los detalles de tu publicación fuera de post sección de post . Conviértalo en un nodo primario separado que consta de varios postAutoID como clave y allí publique los datos como valor. Puede ser útil más adelante, también evitará anidar datos, lo que lo ayudará a navegar a través de su Base de datos.