Я столкнулся с этой проблемой в своем приложении и воспроизвел ее, используя кодовую базу Apple CoreDataBooks с 0 модификациями кода. Проблема в том, что если вы выполняете редактирование управляемого объекта и сохраняете контекст, в результате получается раздел, в котором только одна строка не имеет строк, и новый раздел, созданный с добавленным в него результирующим объектом, тогда вы получаете недопустимое исключение обновления. По-видимому, это также зависит от порядка строк.
Чтобы восстановить, выполните следующие действия:
- Открыть новый экземпляр примера CoreDataBooks
- Отредактируйте книгу Ричарда Докинза "Эгоистичный ген" и измените автора на Бена. Сохрани это. Если вы вернетесь к основному виду, то заметите, что книга находится в новом разделе с именем Бен.
Отредактируйте эту книгу еще раз и смените автора на Дуга. Сохрани это. Вы получите следующее исключение:
2009-10-01 15:14:29.050 CoreDataBooks[10898:20b] *** Assertion failure in -[UITableView_endCellAnimationsWithContext:], /SourceCache/UIKit/UIKit-963.10/UITableView.m:729 2009-10-01 15:14:29.051 CoreDataBooks[10898:20b] Serious application error. Exception was caught during Core Data change processing: Invalid update: invalid number of rows in section 1. The number of rows contained in an existing section after the update (2) must be equal to the number of rows contained in that section before the update (2), plus or minus the number of rows inserted or deleted from that section (0 inserted, 0 deleted). with userInfo (null)
Я бы выложил код из своего собственного приложения, чтобы убедиться, что я не пропускаю ни одного обязательного метода делегата, за исключением того, что в приведенном выше примере это проблема, которая сразу же влияет на пример Apple CoreDataBooks Все методы делегата NSFetchedResultsController реализованы в соответствии с их собственными примерами. Кажется, что их код не забывает обрабатывать вновь созданные разделы, так как он работает в других случаях с другим порядком разделов.
Любая помощь будет оценена. Пример измененного кода из примера CoreDataBooks был бы отличным.