Как программно отменить поиск, который использует searchBar и fetchedResultsController? - PullRequest
0 голосов
/ 11 октября 2011

У меня есть работающее приложение для iPad, которое использует Core Data, SplitView и шаблон Master-Detail. Думайте об этом как о приложении обмена сообщениями Apple, где у вас есть список бесед в корневом контроллере представления, и когда вы выбираете беседу, все ее сообщения появляются в DetailViewController.

Я использую панель поиска в RootViewController, и, поскольку я использую протоколы UISearchDisplayDelegate и UISearchBarDelegate, я использую handleSearchForTerm для обновления результатов поиска, когда пользователь вводит каждый символ своих поисковых слов.

Все это работает очень хорошо.

Вот моя проблема. Существует поток, который извлекает данные из Интернета, и записи могут быть добавлены или удалены из Базовых данных, в то время как мои результаты поиска отображаются.

Прежде чем вы спросите, поток делает все свои добавления и удаления в основном потоке пользовательского интерфейса, вызывая методы с executeSelectorOnMainThread. Таким образом, поиск, добавление и удаление происходят в одном и том же managedObjectContext.

Итак, я выполняю поиск, и появляются результаты. Между тем происходит обновление, и одна из записей в наборе результатов удаляется. Теперь есть несоответствие между результатами и их indexPath.

Мое решение будет простым: когда я обнаружу, что удаление происходит с

- (void) контроллер: (NSFetchedResultsController *) контроллер didChangeObject: (id) anObject atIndexPath: (NSIndexPath *) indexPath forChangeType: (NSFetchedResultsChangeType) тип newIndexPath: (NS) IndexPath: (NSInInxx)

Я хочу программно отменить поиск в строке поиска.

Так как мне программно отменить поиск? Если пользователь нажимает кнопку «Отмена» в строке поиска, все в порядке. Как программно сделать то же самое?

Любая помощь приветствуется.

Peter

1 Ответ

0 голосов
/ 11 октября 2011

Если вы хотите отменить поиск, почему бы не продолжить и использовать следующий вызов UISearchBarDelegate

- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar;

Это предполагает, что в этом месте уже есть правильный код.

...