Recupere solo 5 usuarios a la vez: Firebase [como Instagram]

Durante los últimos días, he estado tratando de crear un feed similar a Instagram para mi aplicación. Para ser más específico: cargue nuevas publicaciones (5) cada vez que el usuario actualice el feed desde abajo.

Actualmente estoy usando Firebase para almacenar y mostrar mis datos.

Mi código hasta ahora, se ve así:

    var ref:FIRDatabaseReference!

    var dict = [String:Any]()
    var posts = [[String:Any]]()

   override func viewDidLoad() {
        super.viewDidLoad()

        tableView.delegate = self
        tableView.dataSource = self

        ref = FIRDatabase.database().reference()

        // Do any additional setup after loading the view, typically from a nib.
    }

    override func viewDidAppear(animated: Bool) {

        loadValues()

    }

    func loadValues() {

        dict.removeAll()
        posts.removeAll()


        ref.child("posts").queryOrderedByChild("timeCreated").queryLimitedToLast(5).observeEventType(.ChildAdded) { (snapshot:FIRDataSnapshot) in

            if let timeCreated = snapshot.value!["timeCreated"] as? Int {
                self.dict["timeCreated"] = timeCreated
            }

            if let postText = snapshot.value!["postText"] as? String {
                self.dict["postText"] = postText
            }


            self.posts.append(self.dict)


            self.tableView.reloadData()

        }




    }


    func scrollViewDidScroll(scrollView: UIScrollView) {

        if (scrollView.contentOffset.y + scrollView.frame.size.height) >= scrollView.contentSize.height {

            //tableView.tableFooterView!.hidden = true
            let pagingSpinner = UIActivityIndicatorView(activityIndicatorStyle: .Gray)
            pagingSpinner.startAnimating()
            pagingSpinner.hidesWhenStopped = true
            pagingSpinner.sizeToFit()
            tableView.tableFooterView = pagingSpinner

            //loadMore(5)

        } else {

            let pagingSpinner = UIActivityIndicatorView(activityIndicatorStyle: .Gray)
            pagingSpinner.stopAnimating()
            pagingSpinner.hidesWhenStopped = true
            pagingSpinner.sizeToFit()
            pagingSpinner.hidden = true
            tableView.tableFooterView = pagingSpinner
            tableView.tableFooterView?.hidden = true


        }


    }


    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return posts.count

    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)

        if let postText = posts[indexPath.row]["postText"] as? String {
            cell.textLabel!.text = postText
        }

        return cell

    }

    func loadMore(increment:Int) {

        //What should go in here?

    }

Entonces, lo que estoy tratando de hacer aquí es detectar cuando el usuario se ha desplazado hacia abajo (en mi función scrollViewDidScroll. Entonces simplemente estoy mostrando el indicador de actividad y llamando a la función loadMore (5) donde 5 es la cantidad de nuevas publicaciones que quiero mostrar.

Entonces aquí tengo dos problemas. La variable timeCreated es simplemente una marca de tiempo, donde tengo diez registros (1-10, donde 10 es el más nuevo y 1 es el más antiguo). Con este código que tengo ahora, tableView muestra los datos en una vista ascendente, comenzando en 5 y terminando en 10.

He intentado revertir la matriz de diccionarios (post) simplemente haciendo un .reverse () antes de agregar el dict en la función loadValues. ya que simplemente quiero que muestre 10 en la parte superior y 5 en la parte inferior.

El segundo problema que tengo es que realmente parece que no puedo encontrar una forma buena y efectiva de actualizar tableView (agregando otros 5 registros). Intenté simplemente tener una variable global con el valor predeterminado de 5, y luego en loadMore simplemente más por cinco, y luego hago un removeAll () tanto en el dict como en las publicaciones, sin suerte (el tableView se desplaza al arriba, que no quiero). También intenté jugar con queryLimitedTolast y queryLimitedToFirst, donde terminé duplicando algunos datos.

En otras palabras, también necesito verificar que el usuario pueda cargar 5 nuevas publicaciones únicas (o ej. 3, si solo quedan 3 publicaciones únicas).

¿Alguien tiene alguna idea sobre cómo abordaría esto?

La ayuda sería muy apreciada, ya que he luchado con esto durante los últimos dos días.

Respuestas a la pregunta(1)

Su respuesta a la pregunta