我有一个工作的 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 中的搜索。
那么如何以编程方式取消搜索呢?如果用户在搜索栏中单击“取消”,则一切正常。我怎样才能以编程方式做同样的事情?
任何帮助表示赞赏。
彼得