0

我有一个工作的 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

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

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

任何帮助表示赞赏。

彼得

4

1 回答 1

0

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

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

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

于 2011-10-10T21:24:21.460 回答