Взглянув на ваш код, он тут же. Я столкнулся с проблемами, используя этот метод для изменения поиска. Исправление: очистите кеш!
Допустим, вы инициировали свой полученный контроллер результатов следующим образом. Обратите внимание на свойство cacheName.
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:[self fetchRequest] managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"UserSearch"];
При изменении предиката просто добавьте:
[NSFetchedResultsController deleteCacheWithName:@"UserSearch"];
Как магия, она будет хорошо работать.
Вы также захотите отслеживать, когда контроллер отображения поиска завершит поиск, и стереть свой предикат.
Хотя эта тема выглядит мертвой, я нашел ее в Google, так что, возможно, кто-то там воспользуется этим. :)