У меня есть работающее приложение для 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