Попытка отсортировать объекты Core Data по дате в табличном представлении - PullRequest
1 голос
/ 16 декабря 2009

У меня есть настройка базовых данных, в которой у каждого объекта есть NSDate, и метод, который возвращает дату в виде строки (т. Е. "15.12.2009"). Объекты отображаются в виде таблицы, и я хотел бы отсортировать их по разделам на основе строки даты. Пример кода Apple в приложении CoreDataBooks использует эту строку:

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

Поэтому я изменил его и использовал эту строку в своем проекте:

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

Где "workoutDateString" - это метод, который возвращает дату объекта тренировки в виде строки. Моя основная настройка данных работает отлично, когда я оставляю sectionNameKeyPath как nil, и я также знаю, что мой метод workoutDateString работает правильно. Но когда я устанавливаю sectionNameKeyPath на workoutDateString, он не только не отображает заголовки разделов, но каждый раз, когда я добавляю объект тренировки, программа вылетает с этой ошибкой:

Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Неверное обновление: недопустимое количество строк в разделе 1. Количество строк, содержащихся в существующем разделе после обновления (3), должно быть равно количеству строк». содержится в этом разделе перед обновлением (1), плюс или минус количество строк, вставленных или удаленных из этого раздела (0 вставлено, 0 удалено). '

Это мой первый настоящий проект для iPhone, и у меня нет опыта настройки разделов таблицы. И поверьте мне, я потратил немало времени на поиск решений в Google.

1 Ответ

1 голос
/ 16 декабря 2009

У меня была точно такая же проблема, и я потратил огромное количество времени на ее изучение.

NSFetchedResultsControllerDelegate код «animate changes» вызывает серьезные проблемы, когда элементы добавляются в совершенно новый раздел или все элементы из раздела перемещаются в другой, оставляя исходный раздел с 0 элементами.

Я бы либо удалил весь код, который делает вставку / удаление разделов / строк, либо использовал бы код Джеффа Ламарша, чтобы исправить это. http://iphonedevelopment.blogspot.com/2009/11/one-fix-to-nsfetchedresultscontroller.html

РЕДАКТИРОВАТЬ: Вы реализовали [tableView: titleForHeaderInSection], верно?

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
    id <NSFetchedResultsSectionInfo> sectionInfo = [[<#Fetched results controller#> sections] objectAtIndex:section];
    return [sectionInfo name];
}
...