Проблема в том, что, как вы обнаружили, комментируя, ваша последняя строка:
[tableView deleteRowsAtIndexPaths:...
В Руководстве по программированию Apple Table View сказано, что вам нужно это сделать, но на самом деле это не так.предполагается при использовании NSFetchedResultsController.Идея NSFetchedResultsController заключается в том, что it позаботится об обновлении пользовательского интерфейса, чтобы синхронизировать его с моделью, чтобы вам это не требовалось.Следовательно, если вы просто удалите объект из модели, контроллер выбранных результатов позаботится об остальном.
[Обновить] Упс, не совсем правильно то, что я сказал только что.Полученный контроллер результатов не просто «позаботится об остальном» без посторонней помощи.Это делегат позаботится обо всем остальном, но кто-то должен реализовать его делегат.У меня есть привычка включать вспомогательный класс CoreDataTablewViewController из курса Standford CS193p, который является просто подклассом UITableViewController, который реализует все методы, рекомендованные в документации NSFetchedResultsController.Наиболее важно то, что он реализует методы делегата, которые обновляют табличное представление при изменении модели.
Таким образом, ваш обновленный подход по-прежнему верен: вы НЕ должны вставлять deleteRowsAtIndexPaths .. в код, который заставляет пользователя удалять их, но пусть выбранный контроллер результатов управляет процессом и реализует делегат для его фактического выполнения.
(получите вспомогательный класс здесь: http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2011-fall, и посмотрите лекцию 14 впосмотри как им пользоваться)