0

У меня есть класс контроллера 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]; 

Вот код инициализации для КОП:

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

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

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

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

2010-03-22 14:42:05.270 Patients[1126:207] Serious application error. Exception was caught during Core Data change processing: * -[NSCFArray insertObject:atIndex:]: index (1) beyond bounds (1) with userInfo (null) 2010-03-22 14:42:05.272 Patients[1126:207] * Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFArray insertObject:atIndex:]: index (1) beyond bounds (1)'

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

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

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

ответ

3

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

+0

Это решило мою проблему! –

+0

Это все еще необходимо в iOS 8? – SAHM

1

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