Вы зависаете, потому что контекст переднего плана не знает, что фоновый контекст удалил объекты из постоянного хранилища. Когда контекст переднего плана пытается выполнить сбой в удаленных объектах, происходит сбой.
Вам нужно будет объединить изменения, сделанные в контексте фонового потока, с контекстом потока переднего плана. Вам необходимо зарегистрировать контекст переднего плана в качестве наблюдателя фонового контекста, чтобы он мог обновляться сам перед тем, как пытаться обнаружить какие-либо новые объекты.
В Core Data Books: RootController.m есть хороший пример того, как это сделать. Файл довольно длинный. Сделайте поиск для mergeChangesFromContextDidSaveNotification:
и прочитайте подробные комментарии.