Как обновить UITableViewController или NSFetchedResultsController?

У меня есть немного проблемы с моим UITableViewController или NSFetchedResultsController. Я не уверен, который является проблемой Соре, но я предполагаю, что это - UITableViewController.

Как я сказал, я использую NSFetchedResultsController для заполнения моих данных в UITableViewController. Данные отсортированы по дате и также отображены в разделах к году даты, например, маю 2010/июней 2010/и так далее. Это отображено как заголовок раздела.

Теперь, когда я добавляю новые данные, они автоматически используют текущую дату в качестве значения по умолчанию, но если я хочу использовать дату, которая в настоящее время находится не в списке раздела, например, апрель 2010 (в настоящее время май и июнь в списке), затем это не отображено правильно. Только, когда я вышел из приложения и запускаю его снова, оно покажет новые заголовки раздела, и все прекрасно.

Таким образом, я так или иначе должен смочь обновить свой список или обновить его. Просто добавив его к контексту и изменившись он, кажется, не обновляет его.

Снова, я не уверен, что я должен обновить, если это - мой объект NSFetchedResultsController или UITableViewController.

ОБНОВЛЕНИЕ № 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 (пустой указатель)

И после этого, режим редактирования (где удалить кнопка появляется) больше не работает.

Спасибо.

9
задан elementsense 19 June 2010 в 23:34
поделиться

2 ответа

Хорошо, похоже, я нашел решение, я просто пропускаю эти

[self.tableView beginUpdates];
[self.tableView endUpdates];

и всегда делаю вот так.

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller 
{

[self.tableView reloadData];

}

Очевидно, я еще немного поработаю над логикой, поскольку проблема возникает только тогда, когда я хочу переместить данные в раздел, которого раньше не существовало. Пока кто-нибудь не предложит мне реальное решение, я буду использовать этот вариант.

15
ответ дан 4 December 2019 в 12:16
поделиться

Вам необходимо реализовать методы делегата controller:didChangeSection:atIndex:forChangeType:. В нем отправьте insertSections:withRowAnimation:, deleteSections:withRowAnimation: и reloadSections:withRowAnimation: сообщения вашему табличному представлению в зависимости от сообщенного типа изменения.

0
ответ дан 4 December 2019 в 12:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: