NSFetchedResultsController Crash
-
07-07-2019 - |
Вопрос
Следующие шаги приводят к сбою в NSFetchedResultsController. Р> <Ол>
Это приводит к сбою, указанному ниже. Если я удаляю избыточный вызов reloadData, сбой не виден. Если я добавлю вызов reloadData к образцу кода рецепта, то и там произойдет сбой.
Это известная проблема с NSFetchedResultsController?
2009-09-13 18: 22: 45.600 Рецепты [14926: 20b] * Завершение работы приложения из-за необработанного исключения 'NSRangeException', причина: '* - [NSCFArray objectAtIndex:]: index ( 0) за пределами (0) '
Решение
Как вы обнаружили самостоятельно, вам НЕ следует использовать [tableView reloadData], потому что вы, вероятно, используете методы делегата NSFetchedResultsController
– controllerWillChangeContent:
– controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
– controller:didChangeSection:atIndex:forChangeType:
– controllerDidChangeContent:
Эти методы фактически отвечают за обновление табличного представления при добавлении, удалении или изменении объектов. Поэтому, когда вы добавляете вызов к [tableView reloadData], происходит то, что два разных потока одновременно осуществляют доступ к вашему табличному представлению и изменяют его. Это вызывает сбой, который вы испытываете.
Если вы не используете методы делегата, то сбой происходит из-за чего-то еще в вашем коде.