Серьезная ошибка приложения

У меня есть класс контроллера TableView, который использует полученный контроллер результатов для отображения списка «пациентов», взятых из модели Core Data. Разделы этой таблицы взяты из атрибута пациента, называемого «местоположение». Вот дескриптор сортировки для запроса на выборку:

NSSortDescriptor *locationDescriptor = [[NSSortDescriptor alloc] initWithKey:@"location" ascending:YES];
NSSortDescriptor *lastNameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:locationDescriptor, lastNameDescriptor, nil];

Вот код инициализации FRC:

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"location" cacheName:@"List"];

Когда я хочу добавить новую сущность «пациент» - я нажимаю кнопку добавления, которая затем подталкивает контроллер представления «добавить нового пациента» в стек навигации.

Первый пациент, которого я добавляю, работает нормально.

Если я добавлю второго пациента - приложение иногда вылетает со следующей ошибкой:

2010-03-22 14: 42: 05.270 Пациенты [1126: 207] Серьезная ошибка приложения. Исключение было обнаружено во время обработки изменения основных данных: * - [NSCFArray insertObject: atIndex:]: index (1) за пределами границ (1) с userInfo (null) 2010-03-22 14: 42: 05.272 Пациенты [1126: 207] * Завершение работы приложения из-за неперехваченного исключения «NSRangeException», причина: «*** - [NSCFArray insertObject: atIndex:]: index (1) за пределами (1)»

Это происходит только в том случае, если у пациента добавлено местоположение (если ничего не добавлено, то по умолчанию используется «неизвестно»). Похоже, это тоже как-то связано с сортировкой локации. Например, если первое место пациента = палата 14, а второе = палата 9, то он обязательно выйдет из строя.

Мне интересно, связано ли это с тем, как я прошу контроллер извлеченных результатов отсортировать имена разделов?

Эта ошибка сводит меня с ума, и я просто не могу в этом разобраться. Любая помощь будет принята с благодарностью!


person Garry Pettet    schedule 22.03.2010    source источник


Ответы (2)


Похоже, это ошибка в коде Apple. У меня был некоторый успех, используя этот подкласс SafeFetchedResultsController.

person Garry Pettet    schedule 19.05.2010
comment
Это все еще нужно в iOS 8? - person SAHM; 07.10.2014

Каждый раз, когда вы видите сообщение «Исключение было обнаружено во время обработки изменения основных данных» при использовании NSFetchedResultsController, вы должны немедленно начать смотреть на свои методы NSFetchedResultsControllerDelegate. Я рекомендую установить точку останова в начале метода контроллера: didChangeObject: atIndexPath: forChangeType: newIndexPath. Затем выполните этот метод и посмотрите, где происходит сбой. Проблема может заключаться в том, что вы неправильно управляете вставкой и удалением разделов в этом методе.

person glorifiedHacker    schedule 27.03.2010