Получить только 5 пользователей одновременно: Firebase [как Instagram]

Последние несколько дней я пытался создать Instagram-подобный канал для своего приложения. Чтобы быть более конкретным: загружайте новые сообщения (5) каждый раз, когда пользователь обновляет канал снизу.

В настоящее время я использую Firebase для хранения и отображения моих данных.

Мой код до сих пор выглядит так:

    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?

    }

Итак, что я пытаюсь сделать здесь - это то, что я определяю, когда пользователь прокрутил до конца (в моей функции scrollViewDidScroll. Затем я просто отображаю индикатор активности и вызываю функцию loadMore (5), где 5 - это сумма новых сообщений, которые я хочу отображать.

Так что здесь у меня две проблемы. Переменная timeCreated - это просто отметка времени, где у меня есть десять записей (1-10, где 10 - самое новое, а 1 - самое старое). С этим кодом, который у меня есть сейчас, tableView отображает данные в возрастающем представлении, начиная с 5 и заканчивая 10.

Я попытался изменить массив словарей (post), просто выполнив .reverse () перед добавлением dict в функцию loadValues. так как я просто хочу, чтобы отображалось 10 вверху и 5 внизу.

Вторая проблема, с которой я столкнулся, заключается в том, что я не могу найти хороший и эффективный способ обновления tableView (добавив еще 5 записей). Я попытался просто иметь глобальную переменную со значением по умолчанию 5, а затем в loadMore просто добавить ее на пять, а затем выполнить removeAll () как для dict, так и для сообщений - без удачи (tableView прокручивает до верх, чего я не хочу). Я также попытался поиграть как с queryLimitedTolast, так и queryLimitedToFirst, где я в итоге продублировал некоторые данные.

Другими словами, мне также нужно убедиться, что пользователь действительно может загрузить 5 новых уникальных сообщений (или, например, 3, если осталось только 3 уникальных сообщения).

У кого-нибудь есть идеи о том, как бы я подошел к этому?

Помощь будет принята с благодарностью, так как я боролся с этим в течение последних двух дней.

Ответы на вопрос(1)

Ваш ответ на вопрос