NSFetchedResultsController - мой _sectionNameKeyPath_ равен _nil_ !!Почему я получаю эту ошибку при добавлении / удалении? - PullRequest
1 голос
/ 15 марта 2011

Классический случай проблемы секций с NSFetchedResultsController, и я вырываю свои волосы. Я установил sectionNameKeyPath на NIL , который я прочитал, это то, что вы хотите без разделов (т.е. 1 раздел).

Код следующий:

- (NSFetchedResultsController *)fetchedResultsController {

    if (_fetchedResultsController != nil) {
        return _fetchedResultsController;
    }

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription 
                                   entityForName:@"MyObjectType" inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] 
                              initWithKey:@"name" ascending:NO];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];

    [fetchRequest setFetchBatchSize:20];

    NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"accountExpenseTypeCache"];
    self.fetchedResultsController = theFetchedResultsController;
    _fetchedResultsController.delegate = self;

    [sort release];
    [fetchRequest release];
    [theFetchedResultsController release];


    return _fetchedResultsController;  
    }

Как видите, мой sectionNameKeyPath имеет значение nil и

Иногда, когда я добавляю или удаляю строку, это работает. Чаще всего я получаю это серьезное падение в консоли, хотя при попытке удалить или добавить:

*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-1447.6.4/UITableView.m:955
(gdb) continue
2011-03-14 18:00:58.104 MyApplicationTest[5741:207] Serious application error.  An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:.  Invalid update: invalid number of sections.  The number of sections contained in the table view after the update (3) must be equal to the number of sections contained in the table view before the update (3), plus or minus the number of sections inserted or deleted (0 inserted, 1 deleted). with userInfo (null)

В чем проблема? Я читал NSFetchedResultsController до 4.0 был создан для обработки пользовательских обновлений? Я могу только предположить, что добавление и удаление строк считаются обновлениями, управляемыми пользователем? Нужно ли реализовывать что-то подобное?

Как реализовать переупорядочение записей CoreData?

?? Из того, что я прочитал, хотя я не понимаю, почему у меня такая проблема, когда у меня ноль для разделов. Почему говорится, что 3 раздела ?!

Заранее спасибо!

1 Ответ

1 голос
/ 16 марта 2011

Количество секций в табличном представлении не зависит от sectionNameKeyPath контроллера извлеченных результатов, а скорее от значения numberOfSectionsInTableView: источника данных.

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

Необходимо также реализовать методы делегата выбранного контроллера результатов в объекте источника данных tableview, чтобы таблица сигнализировала, когда происходит изменение.

...