Серьезная ошибка приложения - PullRequest
0 голосов
/ 22 марта 2010

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

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)» bounds (1) '

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

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

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

Ответы [ 2 ]

3 голосов
/ 19 мая 2010

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

1 голос
/ 27 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...