为啥在 iOS7 中没有调用 willUnloadSearchResultsTableView?

Posted

技术标签:

【中文标题】为啥在 iOS7 中没有调用 willUnloadSearchResultsTableView?【英文标题】:Why is willUnloadSearchResultsTableView not getting called in iOS7?为什么在 iOS7 中没有调用 willUnloadSearchResultsTableView? 【发布时间】:2014-03-08 23:23:07 【问题描述】:

由于某种原因,UISearchDisplayController 委托方法 willUnloadSearchResultsTableViewios7 中停止工作。

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

要对此进行测试,请在 Xcode 5 中打开示例项目,Simple UISearchBar with State Restoration,xcdoc://ios/samplecode/TableSearch/Introduction/Intro.html

1) 在 APLViewController.m 中找到搜索代理方法并在其下方添加:

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

    NSLog(@"willUnloadSearchResultsTableView");

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

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

有人能解释一下吗?

这对我来说是一个真正的问题,因为我已将自定义搜索项添加到选项卡导航器并使用搜索结果的数量更新项目标签。当用户卸载搜索视图时,我恢复了原始选项卡项标签,但在 iOS7 中它没有恢复。

【问题讨论】:

可能是苹果改变了表格视图缓存机制,没有卸载表格。您可以尝试将代码移动到不同的委托方法。 不知道该怎么做,Leo。我需要知道何时卸载搜索视图。 为什么不使用– searchDisplayController:didHideSearchResultsTableView: 【参考方案1】:

可能是 Apple 更改了 table view 缓存机制,并没有像以前一样卸载 table。

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

同时,尝试将您的代码移至以下委托方法:

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

【讨论】:

以上是关于为啥在 iOS7 中没有调用 willUnloadSearchResultsTableView?的主要内容,如果未能解决你的问题,请参考以下文章

为啥iOS7中的bottomLayoutGuide和automaticAdjustsScrollViewInsets没有考虑UIToolBar的高度(带有自动布局)

为啥当我尝试在 ios 7.1 sdk、xcode 5.1 中调用 deallocate 或 release 时出现错误?

为啥我的 UITableView 在 iOS 7 中被切断了?

在 iOS 7 下运行我的 iOS 6 应用程序时,为啥我的视图上没有正确显示阴影?

在 iOS7 中,为啥选中的单元格的背景颜色总是灰色的?

为啥 jscript 在 iOS 7 的 Chrome 浏览器中不起作用?