为什么在iOS7中没有调用willUnloadSearchResultsTableView?

时间:2014-03-08 23:23:07

标签: objective-c ios6 ios7

出于某种原因 UISearchDisplayController 委托方法 willUnloadSearchResultsTableView ,在iOS7中停止工作。

它在我运行iOS 6.1.3的4s设备上正常工作,但在iOS7模拟器中没有。我已经尝试了使用Xcode 5.0的7.0.3和使用Xcode 5.1 Beta 5(5B103i)的7.1。

要测试这个,请打开Xcode 5中的示例项目,带状态恢复的简单UISearchBar ,xcdoc://ios/samplecode/TableSearch/Introduction/Intro.html

1)在APLViewController.m中找到搜索委托方法并在其下面添加:

- (void)searchDisplayController:(UISearchDisplayController *)controller willUnloadSearchResultsTableView:(UITableView *)tableView {

    NSLog(@"willUnloadSearchResultsTableView");
}

2)在iOS6设备上运行应用程序并将一些文本打入搜索视图,然后点击“取消”按钮。您应该在控制台日志中看到文本“willUnloadSearchResultsTableView”。

3)现在尝试在iOS7设备/模拟器上运行相同的代码。这次,当您点击取消按钮时,您将看不到任何写入控制台日志的内容。

任何人都可以对此有所了解吗?

对我来说这是一个真正的问题,因为我已经在Tab导航器中添加了一个自定义搜索项,并使用搜索结果的数量更新了item-label。我在用户卸载搜索视图时恢复原始标签项标签,但在iOS7中无法恢复。

1 个答案:

答案 0 :(得分:2)

Apple可能会更改表视图缓存机制,并且不会以与以前相同的模式卸载表。

如果您认为这是Apple方面的错误,请务必在https://bugreport.apple.com打开错误报告。

与此同时,尝试将代码移动到以下委托方法:

– searchDisplayController:willShowSearchResultsTableView:
– searchDisplayController:didShowSearchResultsTableView:
– searchDisplayController:willHideSearchResultsTableView:
– searchDisplayController:didHideSearchResultsTableView: