如何以编程方式取消使用 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?
Android:如何在 Java 中以编程方式选中/取消选中 RadioGroup 中的单选按钮
Magento - 如何以编程方式取消选中超级产品属性上的“使用默认值”?