在iOS 9.2.1 / XCode 7.2

时间:2016-01-29 14:58:19

标签: ios iphone segue

Upvoters:如果你也看到过这个问题,你可以告诉我吗?

当我尝试从某个场景上的按钮模拟启动视图控制器时,我看到的问题大约每15次发生一次。

这是通过iOS 9.2.1和XCode 7.2完成的,但不清楚它发生在哪个版本上。改变iOS版本并不容易。

症状如下:

  1. 目标视图控制器在手机上不可见。相反,顶部条(带有载体的条)变黑,有时它会闪烁,因此整个屏幕都是黑色的。启动视图控制器是可见的,但没有响应。
  2. 当发生这种情况时,我会进入XCode屏幕并查看调试。值得注意的是,这显示了目标屏幕,几乎就像它应该看起来一样。唯一的区别是其中一个视图没有完成其drawRect,其中一个视图看起来都是斑点。但当然它根本不符合手机的显示效果。
  3. 目标屏幕上的取消按钮似乎仍然有效,因为当我按下应该按的位置时,该应用程序将继续运行。如果我尝试使用按钮重新启动屏幕,它再次无法工作。因此,一旦发生这种情况,屏幕就会停止为该会话工作,并且应用程序需要被杀死并重新启动。
  4. 没有太多提示,但这些信息可能有所帮助:

    • 包含目标屏幕视图的3个滚动视图。所有三个子视图都有自己的drawRect。事实证明,当错误发生时,不会调用其中一个drawRects,导致显示灰色背景。有斑点的视图确实会运行,但我不知道为什么它在查看调试中看起来像。
    • XCode中没有警告。没有关于NSLayout约束或表示重叠的内容。
    • 在prepareForSegue函数的目标视图控制器上设置了两个字段。
    • 通过故事板从时间按钮启动segue。没有丢失或额外的插座,并且正确命名准备功能以捕获它。

    该问题是零星的,但如果您连续多次启动/取消,则会可靠地发生。

    以下是屏幕抓取。我不会告诉你黑屏。它只是黑色的载体和时间。

    The launching screen

    What XCode view debugger shows during black screen

1 个答案:

答案 0 :(得分:0)

我已经解决了。检查内存使用情况非常有用。

灰色区域应该由大背景填充并绘制线条。事实证明,drawBackground的朴素实现会导致内存大小超过200MB。我用CSTiledLayer替换它,现在它需要几MB。