iOS 11 UITableView executeBatchUpdates завершение закрытия не вызывается - PullRequest
0 голосов
/ 22 мая 2018

У меня есть UITableView, который отображает агрегированный поток сообщений из нескольких RSS-каналов.Всякий раз, когда мое приложение извлекает новые сообщения из канала, я создаю объект, представляющий все необходимые вставки и удаления, необходимые для обновления UITableView текущих строк.Я помещаю эти объекты в массив, который я использую в качестве очереди FIFO.Каждые несколько секунд я вытаскиваю первый элемент из этого массива и пытаюсь выполнить все вставки и удаления в UITableView, используя функцию UITableView:performBatchUpdates.

. Все это прекрасно работает ... так долгопоскольку пользователь не прокручивает UITableView вверх и вниз.Если происходит прокрутка, обновления прекращаются, потому что я устанавливаю флаг, чтобы всегда ждать, пока завершится последний набор вставок / удалений, прежде чем начинать следующий пакет, и, к сожалению, иногда закрытие завершенияUITableView:performBatchUpdates никогда не вызывается, поэтому мой флаг никогда не сбрасывается.

Вот код, который я использую для обработки своей входящей очереди изменений для UITableView:

@objc func updateFeedPostsTableView() {

    guard feedUpdateQueue.count > 0,
          !feedTableUpdateInProgress else { return }

    feedTableUpdateInProgress = true
    let feedUpdate = feedUpdateQueue.first!
    feedUpdateQueue.remove(at: 0)

    self.aggregatedRSSFeed = feedUpdate.feed

    self.feedPostsTableView.performBatchUpdates ({
        self.feedPostsTableView.deleteRows(at: feedUpdate.indexPathsOfDeletedPosts,
                                           with: .fade)
        self.feedPostsTableView.insertRows(at: feedUpdate.indexPathsOfNewPosts,
                                           with: .top)
        },
        completion: { (success) in
            self.feedTableUpdateInProgress = false
        }
    )
}

Мой вопрос: почему бы UITableView.performBatchUpdates когда-либо не вызвать его блок завершения?Что я тут не так делаю?

Это iOS 11.2, использующая версию Xcode 9.2.

Спасибо!

1 Ответ

0 голосов
/ 22 мая 2019

У меня была эта проблема.Основной блок performBatchUpdates выполнялся, но блок завершения никогда не вызывался.Я обнаружил, что проблема была вызвана мной, используя подкласс UITableView.Как только я переключился на ваниль UITableView, проблема ушла.

Урок усвоен.Не подкласс UITableView.

...