У меня есть небольшая проблема с моим UITableViewController или NSFetchedResultsController. Я не уверен, в чем проблема, но я думаю, что это UITableViewController.Как обновить UITableViewController или NSFetchedResultsController?
Как я уже сказал, я использую NSFetchedResultsController для заполнения моих данных в UITableViewController. Данные сортируются по дате и также отображаются в разделах по дате-году, например. Май 2010/июнь 2010/и так далее. Это отображается как заголовок раздела.
Теперь, когда я добавляю новые данные, он автоматически использует текущую дату по умолчанию, но если я хочу использовать дату, которая в настоящее время не находится в списке разделов, например. Апрель 2010 года (в настоящее время май и июнь в списке), то это отображается неправильно. Только когда я выхожу из приложения и запускаю его снова, он покажет новые заголовки разделов, и все будет в порядке.
Так что я как-то должен быть в состоянии обновить свой список или обновить его. Просто добавив его в контекст и его изменение, похоже, не обновляет его.
Опять же, я не уверен, что мне нужно обновить, если это мой объект NSFetchedResultsController или UITableViewController.
UPDATE # 1:
Я просто понял, что есть исключения в этом методе:
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
// The fetch controller has sent all current change notifications, so tell the table view to process all updates.
[self.tableView endUpdates];
}
Это где я двигаю данные:
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath
{
UITableView *tableView = self.tableView;
switch(type)
{
case NSFetchedResultsChangeInsert:
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeDelete:
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeUpdate:
// [self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
break;
case NSFetchedResultsChangeMove:
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
// Reloading the section inserts a new row and ensures that titles are updated appropriately.
[tableView reloadSections:[NSIndexSet indexSetWithIndex:newIndexPath.section] withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
Этот метод является довольно много чего взято из примера CoreDataBooks от Apple. И это ошибка:
Серьезная ошибка приложения. Исключено исключение от делегата из NSFetchedResultsController во время вызова -controllerDidChangeContent :. *** - [NSMutableArray removeObjectAtIndex]: индекс 1 за пределы [0 .. 0] с USERINFO (нуль)
И после этого, режим редактирования (где появится кнопка удаления) не работает больше.
Спасибо.
То, что я добавил в вопрос ..., после этого возникает исключение. – elementsense
Вы даже не упоминаете 'controller: didChangeSection: atIndex: forChangeType:'. –
isnt -controller: didChangeObject: atIndexPath: forChangeType: newIndexPath делает то же самое? – elementsense