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 推送动画阴影