Ошибка NSCollectionView: параметр indexPath выходит за пределы или равен нулю
Недавно я играл с OSX-программированием (обычно это парень с iOS), но столкнулся со странной проблемой с NSCollectionView, которую я просто не могу отладить.
Когда я изменяю данные, которые мой источник данных использует для заполнения коллекции элементами, я вызываю reloadData()
на коллекции, как обычно, и иногда попадает в утверждение. Я получаю ошибку Parameter indexPath out of bounds or nil
, Если я не изменяю данные, приложение всегда вылетает в одной и той же точке (точках), хотя иногда, как правило, в первый раз, оно работает просто отлично и только после этого вылетает.
Теперь я отлаживал это много раз. Данные верны, и ни в одной точке моего кода я не вижу пути с нулевым индексом. Утверждение всегда происходит на makeItemWithIdentifier
звоните, и всегда на последнем предмете в коллекции. Если я продолжу, я либо увижу то, что ожидаю, либо некоторые ячейки из предыдущей коллекции все еще будут там, за новыми ячейками.
В какой-то момент я немного переработал код и обнаружил ошибку, возникающую в NSCollectionView
s itemAtIndexPath:
функция вместо
Кто-нибудь еще видел эту ошибку и, если да, что вызвало ее?
Обновление 2: теперь я знаю, что вызывает эту проблему, но не знаю, как ее предотвратить. Что происходит так: пользователь щелкает элемент в представлении коллекции. Этот элемент изменяет объект данных, который источник данных читает из вызовов reloadData
во время просмотра коллекции делегата didSelectItemsAtIndexPaths
метод. По какой-то причине после выполнения этого метода представление коллекции снова запрашивается для ячейки с этим индексным путем. Если таблица была перезагружена за это время, то эта ячейка исчезла, что привело к исключению. Вкратце: вы не можете вызвать 'reload' в представлении коллекции, пока событие мыши обрабатывается в одной из его ячеек, не получив раздражающего утверждения. Так что, если кто-то может придумать способ обойти эту проблему, я бы хотел услышать это!