LIAL
@LIAL

Правильная подгрузка данных для TableView?

Подскажите как правильно организовать подгрузку данных для TableView (TV) чтобы не было лагов и было "правильно".
Имеется АПИ, с которого я получаю данные (АПИ свое, могу править как нужно). Допустим я вытягиваю 20 ближайших объектов и отдаю их в приложение. Они отображаются в TV.
Далее пользователь просмотрев все 20 пытается промотать таблицу ниже 20 (у нас только 20 объектов есть), если я тут буду начинать подгружать к примеру следующие 20, то будет лаг.
Подскажите как правильно организовать и где подгрузку данных в DataSource для TableView - чтобы решить такую задачу ?

PS: пока думаю грузить в массив в синглтоне, который реализует доступ к API, но не пойму в какой момент подгружать туда дополнительно (не весь же сразу забивать), да и не уверен что это хорошее решение
  • Вопрос задан
  • 2047 просмотров
Решения вопроса 1
tikhonov666
@tikhonov666
iOS, Swift, Objective-C
В общем случае вы отлавливаете событие, когда рисуется последняя ячейка. После этого выполняете загрузку данных и добавляете их в таблицу (или методом insertRowsAtIndexPaths или reloadData), перед этим же конечно запихнув их в модель.

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        let lastRow = indexPath.row
        if lastRow == objects.count - 1 {
            fetchData(lastRow)
        }
    }
    
    private func fetchData(lastRow: Int) {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * Int64(NSEC_PER_SEC)), dispatch_get_main_queue()) { () -> Void in
        let object = "New data"
        self.objects.append(object)
        self.tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: lastRow + 1, inSection: 0)], withRowAnimation: .Automatic)
        }
    }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы