NSRangeException для FetchedResultsController

это может быть простая проблема для решения, но она поставила меня в тупик.

Предыстория: у меня есть очень простой UITableView, связанный с FetchedResultsController. В основном таблица заполняет одну строку для каждой строки в FetchedResultsController.

Постановка проблемы: если я нажму кнопку в своем приложении, чтобы просмотреть все записи, приложение вылетит с ошибкой

NSRangeException", причина: "* -[_PFBatchFaultingArray objectAtIndex:]: индекс (2) за пределами (2)

Однако, если я нажму другую кнопку, которая представляет экран для добавления данных, отмену этого экрана без сохранения чего-либо и вернусь к просмотру всего экрана, экран работает отлично.

Я даже пробовал отлаживать с помощью операторов NSLog, которые вы можете увидеть ниже.

2012-06-01 23:37:01.345 TC[35258:fb03] sections : 1
2012-06-01 23:37:43.154 TC[35258:fb03] rows 3
2012-06-01 23:39:29.174 TC[35258:fb03] indexpath <NSIndexPath 0x91180f0> 2 indexes [0, 0]
2012-06-01 23:41:29.041 TC[35258:fb03] indexpath <NSIndexPath 0x903e770> 2 indexes [0, 1]
2012-06-01 23:41:44.015 TC[35258:fb03] indexpath <NSIndexPath 0x904afb0> 2 indexes [0, 2]
2012-06-01 23:41:46.598 TC[35258:fb03] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[_PFBatchFaultingArray objectAtIndex:]: index (2) beyond bounds (2)'

Это меня смутило - когда явно 3 строки, почему в третьей строке выдается ошибка? Ваша помощь и понимание очень ценятся. Благодарю вас


person ChicagoSky    schedule 02.06.2012    source источник
comment
Это как... количество записей в fetchedResultsController и количество записей, собранных в массиве, который вы заполняете в UITableView, не совпадают. Массив выходит за пределы   -  person hp iOS Coder    schedule 02.06.2012
comment
Я понимаю это, но не могу понять, почему они не совпадают, когда NSLog показывает, что в FRC есть 3 строки.   -  person ChicagoSky    schedule 02.06.2012


Ответы (1)


Нашел проблему и решение. Вот что происходило

  1. В главном меню моего приложения у меня есть две кнопки: одна для добавления новых элементов в базу данных, а другая для просмотра всех элементов в моей базе данных.
  2. Вышеупомянутая ошибка возникала, если я просматривал все элементы непосредственно из главного меню, не пытаясь сначала что-то добавить.
  3. Я понял, что если я перейду на экран добавления и отменю действие с экрана добавления, я все еще создаю объект в ManagedObjectContext, но не удаляю его при отмене. Следовательно, система по-прежнему считала 3 строки MamagedObjects, но на самом деле нашла только 2 зафиксированных в базе данных.
  4. Я добавил строку кода кнопки отмены для удаления текущего управляемого объекта из контекста, удалил приложение из симулятора iOS, перекомпилировал и запустил его - работает как шарм.

У вас может быть та же проблема — попробуйте выполнить следующие шаги, чтобы определить, похожа ли ваша проблема.

  1. Удалите приложение из симулятора, скомпилируйте его заново и запустите. Если он работает нормально, то определенно существует конфликт между контекстом и базой данных.
  2. Убедитесь, что вы удаляете управляемые объекты, которые вы, возможно, создали, но не зафиксировали.
person ChicagoSky    schedule 05.06.2012