Ошибка NSCollectionView: параметр indexPath выходит за пределы или равен нулю

Недавно я играл с OSX-программированием (обычно это парень с iOS), но столкнулся со странной проблемой с NSCollectionView, которую я просто не могу отладить.

Когда я изменяю данные, которые мой источник данных использует для заполнения коллекции элементами, я вызываю reloadData() на коллекции, как обычно, и иногда попадает в утверждение. Я получаю ошибку Parameter indexPath out of bounds or nil, Если я не изменяю данные, приложение всегда вылетает в одной и той же точке (точках), хотя иногда, как правило, в первый раз, оно работает просто отлично и только после этого вылетает.

Теперь я отлаживал это много раз. Данные верны, и ни в одной точке моего кода я не вижу пути с нулевым индексом. Утверждение всегда происходит на makeItemWithIdentifier звоните, и всегда на последнем предмете в коллекции. Если я продолжу, я либо увижу то, что ожидаю, либо некоторые ячейки из предыдущей коллекции все еще будут там, за новыми ячейками.

В какой-то момент я немного переработал код и обнаружил ошибку, возникающую в NSCollectionViews itemAtIndexPath: функция вместо

Кто-нибудь еще видел эту ошибку и, если да, что вызвало ее?

Обновление 2: теперь я знаю, что вызывает эту проблему, но не знаю, как ее предотвратить. Что происходит так: пользователь щелкает элемент в представлении коллекции. Этот элемент изменяет объект данных, который источник данных читает из вызовов reloadData во время просмотра коллекции делегата didSelectItemsAtIndexPaths метод. По какой-то причине после выполнения этого метода представление коллекции снова запрашивается для ячейки с этим индексным путем. Если таблица была перезагружена за это время, то эта ячейка исчезла, что привело к исключению. Вкратце: вы не можете вызвать 'reload' в представлении коллекции, пока событие мыши обрабатывается в одной из его ячеек, не получив раздражающего утверждения. Так что, если кто-то может придумать способ обойти эту проблему, я бы хотел услышать это!

0 ответов

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