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

时间:2011-10-10 21:15:36

标签: iphone ipad searchbar

我有一个可用的iPad应用程序,它使用Core Data,一个SplitView,并使用Master-Detail模式。可以把它想象成Apple消息应用程序,在那里您可以在根视图控制器中找到对话列表,当您选择对话时,它的所有消息都会显示在DetailViewController中。

我在RootViewController中使用了searchBar,因为我使用了UISearchDisplayDelegate和UISearchBarDelegate协议,所以当用户键入搜索词的每个字符时,我使用handleSearchForTerm来更新我的搜索结果。

这一切都很有效。

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

在你不得不问之前,线程在主UI线程上执行所有添加和删除操作,使用performSelectorOnMainThread调用方法。因此,搜索,添加和删除都发生在同一个managedObjectContext中。

所以会发生什么是我进行搜索,结果出现。同时,发生更新,结果集中的一个记录被删除。现在,结果和它们的indexPath之间存在不匹配。

我的解决方案很简单:当我检测到

发生删除时

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

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

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

感谢任何帮助。

彼得

1 个答案:

答案 0 :(得分:0)

如果您想取消搜索,为什么不继续使用以下UISearchBarDelegate调用

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

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