iOS 应用程序在推送“动画”设置为“是”的视图控制器时崩溃,但在“动画”设置为“否”时工作正常

Posted

技术标签:

【中文标题】iOS 应用程序在推送“动画”设置为“是”的视图控制器时崩溃,但在“动画”设置为“否”时工作正常【英文标题】:iOS app crashes when pushing a view controller with "animated" set to "YES", but works fine when "animated" set to "NO" 【发布时间】:2011-08-22 12:50:34 【问题描述】:

好的,现在这对我来说真是令人难以置信,我真的无法理解它......我用谷歌搜索了它,仍然没有。

我设置了一个 UINavigationController 来推送根视图控制器。当按下 UIButton 时,根视图控制器会推送一个新的视图控制器(实际上是 TableViewController),这就是事情变得奇怪的地方。

只有当我将“animated”设置为“YES”时,应用才会崩溃。

[[self navigationController] pushViewController:listView animated:YES];

如果我更改此设置并将“动画”设置为“否”,应用程序将继续正常运行并运行良好...我将“动画”设置回“是”,但它再次崩溃。

最终,如果我能保留动画,我会很高兴的,毕竟它是 ios 最美丽的东西之一,但在目前的情况下,我终生无法弄清楚发生了什么.

请帮我弄清楚这里可能出了什么问题。

【问题讨论】:

在不知道异常和/或堆栈跟踪是什么的情况下很难提供帮助。 我建议你打开你的僵尸并在 Instruments 中运行应用程序,这应该会向你显示正在发布和访问的内容,这可能是你崩溃的根源。 ***.com/questions/5386160/… 【参考方案1】:

当动画打开时,Core Animation 正在访问 CALayer 对象,即视图的绘制部分,来自根视图控制器和新视图控制器。当动画关闭时,Core Animation 不需要根视图控制器的 CALayer 对象。也许您在根视图中发布了一些视图并且它支持CALayer 对象的速度太快了。

【讨论】:

【参考方案2】:

谢谢伯纳先生,您实际上给了我提示,使我找到了解决方案。问题是我推送的视图控制器实际上是一个表格视图控制器,它的单元格是根据在 NSArray 中找到的条目动态创建的。我在 viewDidLoad 函数中初始化 NSArray,但是我已将其设置为自动释放,因此在 CALayer 绘制视图之前,它已从内存中释放。

【讨论】:

以上是关于iOS 应用程序在推送“动画”设置为“是”的视图控制器时崩溃,但在“动画”设置为“否”时工作正常的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 UINavigationController 推送动画阴影

iOS 8:UINavigationController 弹出没有动画然后推送

iOS:视图控制器之间的动画

如何设置推送和弹出视图控制器流程

iOS 7 中的 iOS 6 滑动推送控制器动画

我们如何在 iOS 11 中实现 App Store 的 Today 功能中的新推送视图控制器动画