2009-12-16 4 views
1

У меня есть настройка основных данных, где каждый объект имеет NSDate и метод, который возвращает дату в виде строки (например, «12/15/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» является методом, который возвращает дату объекта Workout в как строка. Моя основная настройка данных работает отлично, когда я оставляю sectionNameKeyPath как ноль, и я также знаю, что мой метод workoutDateString работает правильно. Но когда я поставил sectionNameKeyPath в workoutDateString, не только не отображать название разделов, но каждый раз, когда я добавить объект тренировки, программа вылетает с этой ошибкой:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 1. The number of rows contained in an existing section after the update (3) must be equal to the number of rows contained in that section before the update (1), plus or minus the number of rows inserted or deleted from that section (0 inserted, 0 deleted).'

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

ответ

1

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

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

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

EDIT: Вы внедрили [tableView: titleForHeaderInSection], правильно?

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

Я добавил код Джеффа LaMarche в и Tableview: метод titleForHeaderInSection, и теперь сбои приложений при запуске: *** Нагрузочных приложения из-за неперехваченное исключение «NSRangeException», причина: «*** - [NSCFArray objectAtIndex:]: index (0) за пределами границ (0) ' – 2009-12-16 05:20:03

+0

* _ * время для отладки, это оба «хорошо известные» фрагменты кода. – refulgentis

+0

, вы должны прочитать руководство по программированию таблиц, прежде чем двигаться дальше с помощью материала NSFetchedResultsController. Если у вас нет четкого представления о просмотре таблиц (т. Е. Отсутствуют такие вещи, как titleForHeaderInSection), будет почти невозможно получить NSFetchedResultsController. – refulgentis

Смежные вопросы