Nur 5 Benutzer gleichzeitig abrufen: Firebase [wie Instagram]

In den letzten Tagen habe ich versucht, einen Instagram-ähnlichen Feed für meine App zu erstellen. Genauer gesagt: Laden Sie jedes Mal neue Beiträge (5), wenn der Benutzer den Feed von unten aktualisiert.

ch verwende derzeit Firebase, um meine Daten zu speichern und anzuzeige

Mein Code sieht bisher so aus:

    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?

    }

Was ich hier versuche, ist, dass ich feststelle, wann der Benutzer nach unten gescrollt hat (in meiner scrollViewDidScroll-Funktion. Dann zeige ich einfach den Aktivitätsindikator an und rufe die Funktion loadMore (5) auf, wobei 5 die ist Anzahl der neuen Beiträge, die ich anzeigen möchte.

So hier habe ich zwei probleme. Die Variable timeCreated ist einfach ein Zeitstempel mit zehn Datensätzen (1-10, wobei 10 der neueste und 1 der älteste ist). Mit diesem Code, den ich jetzt habe, zeigt die tableView die Daten in aufsteigender Reihenfolge an, beginnend bei 5 und endend bei 10.

Ich habe versucht, das Array der Wörterbücher (post) umzukehren, indem ich einfach .reverse () ausgeführt habe, bevor ich das Diktat in die loadValues-Funktion angefügt habe. da ich einfach will, dass es 10 oben und 5 unten anzeigt.

Das zweite Problem, das ich habe, ist, dass ich nicht wirklich eine gute und effektive Methode zum Aktualisieren der tableView finden kann (Hinzufügen weiterer 5 Datensätze). Ich habe versucht, einfach nur eine globale Variable mit dem Standardwert 5 zu haben, und dann bei loadMore einfach plus fünf, und dann ein removeAll () sowohl für das Diktat als auch für die Beiträge auszuführen - ohne Glück (die tableView scrollt zum oben, was ich nicht will). Ich habe auch versucht, sowohl mit queryLimitedTolast als auch mit queryLimitedToFirst zu spielen, wobei ich am Ende einige Daten dupliziert habe.

So mit anderen Worten, ich muss auch überprüfen, ob der Benutzer tatsächlich 5 neue eindeutige Beiträge laden kann (oder zB 3, wenn nur noch 3 eindeutige Beiträge übrig sind).

Hat jemand eine Idee, wie ich das angehen würde?

Hilfe wäre sehr dankbar, da ich jetzt seit zwei Tagen damit zu kämpfen habe.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage