2015-03-26 2 views
0

У меня есть TableViewController с SearchBar, отображающий список стран. Пользователь может добавлять свои собственные, а также удалять их. Нормальное удаление из таблицы прекрасно работает, но когда я фильтрую список с помощью uisearchbar и пытаюсь удалить одну из записей, анимация удаления не работает, и система вылетает, когда я выбираю кнопку «Назад». Вот мой commitEditingStyle код:Удалить элемент данных ядра из отфильтрованного tableview вызывает сбой

if (editingStyle == UITableViewCellEditingStyleDelete) { 

    [self.tableView beginUpdates]; // Avoid NSInternalInconsistencyException 

    Country *countryToDelete; 
    if (self.searchDisplayController.active) { 
     //get the country object from the filtered results 
     countryToDelete = [self.countryResults objectAtIndex:indexPath.row]; 
     //delete the selected item from the filtered results 
     [self.countryResults removeObject:countryToDelete]; 
     //delete the row which corresponds to the deleted filtered item 
     [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
           withRowAnimation:UITableViewRowAnimationFade]; 
    } else { 
     countryToDelete = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
     [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
           withRowAnimation:UITableViewRowAnimationFade]; 
    } 

    [self.managedObjectContext deleteObject:countryToDelete]; 
    [self.managedObjectContext save:nil]; 

    [self.tableView endUpdates]; 

} 

ответ

0

Я не могу обнаружить ошибку в коде на первый взгляд. Но если вы все равно используете CoreData, я рекомендую вам ознакомиться с NSFetchedResultsController. Это объект, который управляет изменениями непрерывного отбора/отслеживания до некоторого ManagedObjects, которые соответствуют определенным критериям. Он может быть хорошо интегрирован с TableView, что дает вам возможность удалять/добавлять анимацию строк в основном бесплатно. Вы даете ему контекст для извлечения данных из и предиката (критерии, которые должны выполняться объектом, который должен быть принят во внимание NSFetchedResultsController). Затем он отслеживает изменения, внесенные в эти объекты, и дает вам удобные вызовы API для настройки добавления/удаления/перезагрузки строк.

Вот очень подробный учебник, описывающий его использование: http://www.raywenderlich.com/999/core-data-tutorial-for-ios-how-to-use-nsfetchedresultscontroller

Смежные вопросы