2013-03-29 1 views
0

У меня есть UITableView, который получает массив объектов Core Data из FetchedResultsController. Я хочу, чтобы иметь возможность удалять объект из представления таблицы с помощью стандартной кнопки удаления, а ячейка tableview исчезает, как обычно, когда элемент удален, однако в моем случае я не фактически удаление объекта, но обозначив его как удаленный. Например, у меня есть атрибут, который называется deleted, поэтому он все еще существует, но отображается удаленным;Как удалить элемент из фильтрованного UITableView, не удалив его вообще?

obj.deleted = [NSNumber numberWithBool:YES]; 

Есть ли способ сделать это, чтобы он по-прежнему работал в соответствии со стандартным удалением?

Я не могу сделать это без звонка [self.tableView reloadData], поэтому я теряю приятные анимации, которые поставляются со стандартным удалением.

Мой контрольный элемент данных, обработанный таблицей, имеет фильтр, поэтому данные в таблицеView фильтруются;

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"deleted == %@", [NSNumber numberWithBool:NO]; 

подозревается, что код, который мне нужен, пойдет сюда;

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     // 
    } 
} 
+0

Что вы подразумеваете под «маркировкой его как удаленной в основных данных» и «поэтому он по-прежнему работает в соответствии со стандартным удалением» ? –

+0

Извините, было трудно объяснить. У меня есть атрибут BOOL, который называется deleted, который я хотел бы установить в 'obj.deleted = [NSNumber numberWithBool: YES];' поэтому получатель результатов не извлекает его. Надеюсь, это имело смысл. – ADAM

ответ

2

NSManagedObject уже есть метод isDeleted, поэтому пользовательский атрибут deleted вероятно, препятствует этому методу. Вы можете добавить атрибут invisible к вашему лицу и проверить

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"invisible == %@", [NSNumber numberWithBool:NO]; 

в извлеченном контроллере результатов. Если вы установили

obj.invisible = [NSNumber numberWithBool:YES]; 

объект должен быть удален со стола. (Возможно, вам придется сохранить контекст, я не уверен на 100% прямо сейчас.)

+0

Пригвожден. Даже не нужно было сохранять контекст. Просто присваивается 'obj.invisible = [NSNumber numberWithBool: YES];' и исчезает, как если бы он был удален. благодаря – ADAM