В настоящее время я изначально загружаю сообщения пользователя через:
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
в методе обновления, и после начальной загрузки идентификатор остается прежним, даже если я обращаюсь к первому элементу в массиве словарей? По сути, когда я обновляю табличное представление, оно не запрашивает правильные данные, и моя реализация разбиения на страницы, кажется, работает неправильно.