При работе с UICollectionView в моем приложении у меня возникла странная проблема, связанная с перезагрузкой данных. После долгих отладочных и аналитических журналов я пришел к выводу, что если за reloadData сразу следует insertItemsAtIndexPaths, гарантируется страшная ошибка ниже:
Имя:
NSInternalInconsistencyExceptionПричина: Недействительное обновление: недействительно количество элементов в разделе 0. Количество элементов, содержащихся в существующий раздел после обновления (1) должен быть равен числу элементы, содержащиеся в этом разделе перед обновлением (1), плюс или минус количество вставленных или удаленных элементов из этого раздела (1 вставлено)...
Только для этого всегда существует то, что внутри UICollectionView по-прежнему занят reloadData, когда приходит вызов insertItemsAtIndexPaths. Тот факт, что "collectionView:numberOfItemsInSection" вызывается дважды в строке до завершения insertItemsAtIndexPaths, похоже, поддерживает это, поскольку этот метод никогда не вызывается дважды в строке при вызове других случаев.
Кто-нибудь видел подобное поведение или может подтвердить мой анализ или даже предложить правильное обходное решение?
Обновление: любое да, я убедился, что все соответствующие вызовы происходят в основном потоке.
Обновление 2. Поскольку аргументация о том, чтобы попасть в эту ситуацию вообще, была поставлена под сомнение: я использую Monotouch, и этот код предназначен для хранения общих коллекций .Net Collections это событие в соответствующие вызовы, чтобы привязать UICollectionView к коллекции в синхронизации. Когда исходная коллекция очищается, она реагирует с действием Reset, за которым следует один или несколько действий Add, когда элементы вставлены в него, что приводит к описанной выше проблеме. Надеюсь, это поможет.