iPad SplitViewController 内存警告导致主视图出现问题

Posted

技术标签:

【中文标题】iPad SplitViewController 内存警告导致主视图出现问题【英文标题】:iPad SplitViewController Memory Warning Causes Problems With Master View 【发布时间】:2012-08-23 02:03:56 【问题描述】:

我有一个具有以下功能的 iPad SplitViewController 应用程序:

通过在 shouldHideViewController 委托方法中返回 YES,主(左手)视图控制器隐藏在纵向和横向中 主视图控制器包含一个标签栏控制器 我利用多主细节管理器来管理根据用户在主选项卡栏中所做的选择来交换细节视图控制器

我遇到的问题仅在应用程序收到内存警告后才会出现。当主视图滑入(通过滑动或点击左栏按钮)时,视图实际上显示为空,即它不包含任何表格视图,只是表格视图应该所在的半透明背景。如果我点击标签栏中的另一个视图,它会正确加载它的主视图。如果我然后点击返回问题视图,它现在会正确显示。

最初我遇到了另一个问题,不仅视图是空的,而且它的大小也适合全屏。我能够通过this SO question 中提出的解决方案解决大小问题 - 在解决方案中指出“显然,当收到内存警告时,视图控制器被释放,所以当它再次出现时,它会得到它的大小从它的父视图,它是全屏的。所以你只需要在每次加载时重置框架。”

通过在我的代码中设置断点,我可以验证当我在内存警告后第一次尝试访问主视图时调用 ViewDidLoad 事件(如果没有内存警告,则不会发生),但是 ViewDidAppear & ViewWillAppear 事件不被调用。所以应用程序知道它需要在内存警告后重新加载主视图,但由于某种原因它似乎没有显示主视图。

我正在努力弄清楚如何在出现内存警告后正确地使视图再次出现。或者我应该做些什么来防止在收到内存警告时卸载主视图?

更新:我还观察到,如果在内存警告时显示主视图,则不会发生此问题。

【问题讨论】:

我也遇到过这个问题,它确实似乎在 ios 6 中得到了修复。 【参考方案1】:

我向 Apple 技术支持提出了这个问题。他们的回复如下:

雷达搜索表明这是 iOS 5.1 中的一个已知问题,并且 那个工程知道这一点。目前好像没有 除了确保您不这样做之外,此问题的解决方法 获取内存警告。

如果您愿意,可以在以下位置提交其他错误: http://bugreporter.apple.com/。另外我建议你试试 这个,看看它在 iOS 6 中是否仍然是一个问题。如果是,请提交一个 错误并将雷达编号发送给我,以便我跟踪它。

我按照他们的建议做了,并在 iOS 6 中进行了尝试。我发现问题没有出现,因此似乎在 iOS 6 中得到了修复。Apple 没有为 iOS 5.1 提供解决方案。

【讨论】:

以上是关于iPad SplitViewController 内存警告导致主视图出现问题的主要内容,如果未能解决你的问题,请参考以下文章

iPad splitViewController 弹出主视图

SplitViewController 显示细节 iPad Pro 纵向模式

使用 splitViewController 在 iPad 故事板上出现黑屏

iPad SplitViewController - 使用 iPhone 故事板 ViewController

iPad SplitViewController 内存警告导致主视图出现问题

Ipad SplitViewController 导航到另一个视图