Firebase нумерация страниц возвращает те же данные? - PullRequest
0 голосов
/ 05 июля 2018

В настоящее время я изначально загружаю сообщения пользователя через:

  func fetchMessages() {

    if started == true {

    let messageRef = Database.database().reference().child("messages").queryOrdered(byChild: "convoID").queryEqual(toValue: convoID).queryLimited(toLast: 10)
    messageRef.observe(.childAdded) { (snapshot) in
        if let value = snapshot.value as? NSDictionary {
            let newMessage = message()
            newMessage.messageText =  value["content"] as? String
            newMessage.sender = value["sender"] as? String
            newMessage.messageID = snapshot.key
            self.messageList.append(newMessage)


            self.queryingStatus = true
            self.messagesTableView.reloadData()
            self.scrollToBottom()
        }

    }
}
}

Теперь, чтобы свести к минимуму загрузку данных, я решил разбить сообщения на куски как таковые, чтобы пользователь загружал десять последующих сообщений каждый раз, когда они открывали представление таблицы:

   @objc func handleRefresh(_ refreshControl: UIRefreshControl) {

    let lastIDDictionary = messageList[0]
    let lastIDQueried = lastIDDictionary.messageID

    let messageRefAddition = Database.database().reference().child("messages").queryOrdered(byChild: "convoID").queryLimited(toLast: 10).queryEnding(atValue: convoID, childKey: lastIDQueried!)
    messageRefAddition.observeSingleEvent(of: .value) { (snapshot) in

        for child in snapshot.children.allObjects as! [DataSnapshot] {

            if let messageValue = child.value as? NSDictionary {

            let newMessage = message()
            newMessage.messageText =  messageValue["content"] as? String
            newMessage.sender = messageValue["sender"] as? String
            newMessage.messageID = child.key

            self.messageList.insert(newMessage, at: 0)
            self.messagesTableView.reloadData()
            }
        }

    }


    refreshControl.endRefreshing()
}

Проблема в том, что, когда я открываю представление таблицы, он впервые возвращает несколько новых сообщений (я не уверен, что порядок даже правильный). Однако, когда я снова вытягиваю табличное представление для обновления, оно снова добавляет те же десять сообщений. Я напечатал lastIDQueried в методе обновления, и после начальной загрузки идентификатор остается прежним, даже если я обращаюсь к первому элементу в массиве словарей? По сути, когда я обновляю табличное представление, оно не запрашивает правильные данные, и моя реализация разбиения на страницы, кажется, работает неправильно.

1 Ответ

0 голосов
/ 06 июля 2018

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

...