如何以编程方式取消使用 searchBar 和 fetchedResultsController 的搜索?

Posted

技术标签:

【中文标题】如何以编程方式取消使用 searchBar 和 fetchedResultsController 的搜索?【英文标题】:How do I programmatically cancel a search that uses a searchBar and fetchedResultsController? 【发布时间】:2011-10-10 21:15:35 【问题描述】:

我有一个可以工作的 iPad 应用程序,它使用 Core Data、SplitView 和 Master-Detail 模式。可以将其想象为 Apple 消息传递应用程序,您在根视图控制器中有一个对话列表,当您选择一个对话时,它的所有消息都会显示在 DetailViewController 中。

我在 RootViewController 中使用了一个 searchBar,并且由于我使用 UISearchDisplayDelegate 和 UISearchBarDelegate 协议,我使用 handleSearchForTerm 来更新我的搜索结果,因为用户键入了他们搜索词的每个字符。

这一切都很好。

这是我的问题。有一个线程从 Internet 获取数据,并且可以在显示我的搜索结果的同时从 Core Data 添加或删除记录。

在您必须询问之前,线程在主 UI 线程上执行所有添加和删除操作,并使用 performSelectorOnMainThread 调用方法。所以搜索、添加和删除都发生在同一个 managedObjectContext 中。

所以发生的事情是我进行了搜索,结果出现了。同时,发生更新,结果集中的一条记录被删除。现在,结果与其 indexPath 不匹配。

我的解决方案很简单:当我检测到删除发生时

-(void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath

我想以编程方式取消 searchBar 中的搜索。

那么如何以编程方式取消搜索?如果用户在搜索栏中单击“取消”,则一切正常。我怎样才能以编程方式做同样的事情?

感谢任何帮助。

彼得

【问题讨论】:

【参考方案1】:

如果你想取消搜索,为什么不继续使用下面的 UISearchBarDelegate 调用

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

这是假设您已经在此位置拥有正确的代码。

【讨论】:

以上是关于如何以编程方式取消使用 searchBar 和 fetchedResultsController 的搜索?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式将标记 (UIControl) 添加到 UITextField 或 SearchBar?

如何以编程方式取消从 InputStream 中读取?

Android:如何在 Java 中以编程方式选中/取消选中 RadioGroup 中的单选按钮

Magento - 如何以编程方式取消选中超级产品属性上的“使用默认值”?

Swift:searchBar - 如何更改“取消”按钮标题

Swift:searchBar - 如何更改“取消”按钮标题