ОК удалось это сделать -
Я не знаю, как это делает яблоко, но я отошел, когда понял, что формирование новой выборки является более дорогой операцией, чем шаг
1: в моем случае я добавил mutableArray, который собирает все индексы ячеек, которые я хочу исчезнуть, когда пользователь нажимает на сегментированный контроллер.
в функции CellForRaw я вставил этот маленький код:
- (void)configureCell:(PersonCell *)cell atIndexPath:(NSIndexPath *)indexPath {
// Configure the cell
if([fetchedResultsController objectAtIndexPath:indexPath]!=nil){
Person *person = (Person *)[fetchedResultsController objectAtIndexPath:indexPath];
cell.person = person;
cell.delegate=self;
if (person.state!=0) {
[activeIndexPaths addObject:indexPath];
}
}
}
, который вставляет indexPath объектов, которые я хочу отфильтровать, в массив для дальнейшего использования.
шаг 2: следующая функция вызывается при внесении изменений в segmentedController -
-(void)ReloadTableViewWithNewPerdicate:(id)sender{
UISegmentedControl *sc = (UISegmentedControl*)sender;
//[theTableView beginUpdates];
Person *person;
switch (sc.selectedSegmentIndex) {
case 1:
for (int i=0; i<[activeIndexPaths count]; i++) {
person=(Person*)[fetchedResultsController objectAtIndexPath:[activeIndexPaths objectAtIndex:i]];
[fetchedResultsController.managedObjectContext deleteObject:person];
}
//[theTableView insertRowsAtIndexPaths:activeIndexPaths withRowAnimation:UITableViewRowAnimationRight];
break;
case 0:
[fetchedResultsController.managedObjectContext rollback];
break;
}
Эта функция удаляет необработанные строки из fetchedResultsController.managedObjectContext и:
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller{
}
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
}
- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type {
}
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
}
*Функции 1021 * отвечают за удаление ненужных необработанных строк.и это в основном то, как вы получаете эффект удаления.
шаг 3: когда пользователь нажимает на главную кнопку segmentedController, функция вызывает:
[fetchedResultsController.managedObjectContext rollback];
, чтобуквально откатывает все назад.
шаг 4: Последний важный шаг - добавить функцию rollBack в ViewWillDisAppear, чтобы убедиться, что функция сохранения в делегате приложения не сохранит изменения и удалит изменения.сырье из магазина.
надеюсь, это кому-нибудь поможет.
добрый день.