Как бороться с обновлениями реактивного программирования и CollectionView

У меня есть веб-сокет, который может добавлять или удалять данные в MutableProperty<[Stuff]>

Но когда я перезагружаю collectionView с collectionView.reloadData(). Веб-сокеты добавляют или удаляют данные в MutableProperty<[Stuff]>, поэтому он выйдет из строя

по нескольким причинам вот некоторые ошибки:

  • Индекс вне диапазона, когда методы collectionView используют мой список
  • Недопустимое количество элементов вызывает сбой, например: Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of sections. The number of sections contained in the collection view after the update (58) must be equal to the number of sections contained in the collection view before the update (59), plus or minus the number of sections inserted or deleted (0 inserted, 0 deleted).'

У кого-нибудь есть хороший совет или лучшая практика, чтобы сделать это? Я вижу, что MutableProperty является потокобезопасным.

Я знаю, почему он падает. Это происходит из-за того, что веб-сокеты добавляют или удаляют значения из массива во время reloadData из collectionView, но я не знаю, как это решить. Я знаю, что мы можем использовать семафор, но я ищу что-то элегантное.


person uligerri-6156    schedule 29.10.2018    source источник


Ответы (1)


Вы должны показать нам немного больше своего кода, чтобы мы лучше поняли. Однако, если вы возвращаете фиксированное значение в делегатах: numberOfSections и numberOfRowsInSection, вам необходимо обновить их перед вызовом collectionView.reloadData(), чтобы эти два делегата возвращали точное количество разделов и элементов в каждом разделе.

person chrisayn    schedule 29.10.2018
comment
Спасибо за ваш ответ, значение обновляется, но когда выполняется обновление, веб-сокет может добавлять данные - person uligerri-6156; 29.10.2018
comment
Вы должны использовать функцию, которая добавит данные, обновит все необходимые переменные, а затем, наконец, перезагрузит коллекцию в конце. - person chrisayn; 29.10.2018