У меня есть UITableView
, заполненный NSFetchedResultsController
.Начальная загрузка работает нормально.Я могу добавлять, удалять, изменять и т. Д. С нулевыми проблемами. Но я хочу добавить пользовательскую сортировку в таблицу.Я делаю это, меняя NSFetchedResultsController
на другой набор sortDescriptor
и другой sectionNameKeyPath
.Вот код, где я меняю выборку:
-(void)changeFetchData {
fetchedResultsController = nil;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Object" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSString *sortKey = @"sortKey";
NSString *cacheName = @"myNewCache";
BOOL ascending = YES;
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:sortKey ascending:ascending];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:sortKey cacheName:nil];
self.fetchedResultsController = aFetchedResultsController;
fetchedResultsController.delegate = self;
[aFetchedResultsController release];
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];
NSError *error;
if (![[self fetchedResultsController] performFetch:&error]) {
// Update to handle the error appropriately.
NSLog(@"Fetch failed");
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1); // Fail
}
[self.tableView reloadData];
}
Когда я вызываю этот метод, он прекрасно работает.Таблица немедленно переупорядочивает себя, чтобы использовать новую информацию о разделе и новые параметры сортировки.Но если я добавляю или удаляю элементы к данным, TableView не обновляет свою информацию, вызывая сбой.Я могу NSLog подсчитать общее количество объектов в fetchedResultsController и увидеть, как он увеличивается (и уменьшается), но если я NSLog возвращаю значения для numberOfRowsInSection
для отслеживания изменений, метод вызывается, но значения don 'т изменить.Получают следующий сбой (для добавления, но удаление аналогично)
Неверное обновление: недопустимое количество строк в разделе 2. Количество строк, содержащихся в существующем разделе после обновления (3), должно бытьравно количеству строк, содержащихся в этом разделе до обновления (3), плюс или минус количество строк, вставленных или удаленных из этого раздела (1 добавлено, 0 удалено).with userInfo (null)
Если я перезапущу приложение, я вижу добавленный элемент или не вижу удаленный элемент, поэтому я правильно изменяю источник данных.
Есть идеи?