Перезагрузите TableView только в новых строках, когда пользователь прокручивает вниз

Я пытаюсь добавить новые данные в Tableview и перезагружать Tableview только для новых добавленных данных.

В моем приложении произошел сбой, из-за чего я получил эту ошибку: "попытка удалить строку 19 из раздела 0, который содержит только 10 строк до обновления"

Я хотел бы перезагрузить эти строки после завершения асинхронной функции contentQueryContinuous().

Вот мой код:

//Once User Scrolls all the way to bottom, beginContentBatchFetch() is called

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let offsetY = scrollView.contentSize.height
    let contentHeight = scrollView.contentSize.height
    if offsetY > contentHeight - scrollView.frame.height {
        beginContentBatchFetch()
    }
}

//Content Batch Fetch looks up to 10 new elements, tries to append to current array's, and then reload's tableview only for those new elements

func beginContentBatchFetch() {
    contentFetchMore = true
    ProgressHUD.show()
    let oldcount = contentObjectIdArray.count
    var IndexPathsToReload = [IndexPath]()
    var startIndex = Int()
    var endIndex = Int()
    DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
  //Calls self.contentQueryContinous which adds new elements
        self.contentQueryContinous()
        let newElements = self.contentObjectIdArray.count - oldcount
        startIndex = oldcount
        endIndex = self.contentObjectIdArray.count
        for index  in startIndex..<endIndex {
            let indexPath = IndexPath(row: index, section: 0)
            IndexPathsToReload.append(indexPath)
            }
        if newElements > 0 {
        self.MyTableView.reloadRows(at: IndexPathsToReload, with: .fade)
        }
        ProgressHUD.dismiss()
      }
  }

Вот contentQueryContinous()

   func contentQueryContinous() {
    if contentObjectIdArray.count != 0 {
        contentSkip = contentObjectIdArray.count
        let query = PFQuery(className: "ContentPost")
        query.whereKey("Spot", equalTo: SpotText)
        query.limit = 10
        query.skip = contentSkip
        query.addDescendingOrder("createdAt")
        query.findObjectsInBackground(block: { (objects: [PFObject]?,error: Error?) in
        if let objects = objects {
            for object in objects {
                    let ProfileImageFile = object["ProfileImage"] as? PFFileObject
                            let urlString = ProfileImageFile?.url as! String
                                        if let url = URL(string: urlString) {
                                            let data = try? Data(contentsOf: url)
                                               if let imageData = data {
                                                   self.contentPostProPicUrlArray.append(urlString as NSString)
                                                   self.contentPostProPicImageCache.setObject(UIImage(data: imageData)!, forKey: urlString as NSString)
                                               }
                                           }
                    if object["Post"] != nil && object["UserLikes"] != nil && object["Username"] != nil && object["UserTime"] != nil {
                        self.contentPostArray.append(object["Post"] as! String)
                        self.contentLikeArray.append(object["UserLikes"] as! Int)
                        self.contentUsernameArray.append(object["Username"] as! String)
                        self.contentTimeArray.append(object["UserTime"] as! String)
                        self.contentObjectIdArray.append(object.objectId!)
              }
            }
            print(self.contentPostArray)
        }
    })
}

}

1 ответ

Вы пытаетесь перезагрузить ячейку, которой нет в таблице. Попробуй вставить. Кроме того, вы рискуете состязанием.

Из документов

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

Другие вопросы по тегам