3

我遇到了一个问题,我的应用程序在睡眠时崩溃,有时在家里崩溃。我BAD_ACCESS在一个名为 的线程中遇到错误gpus_ReturnNotPermittedKillClient,它告诉我我的应用正在后台进行 UI 更改,据我了解,这是不行的。因此,我正在单步执行我的代码以查看在 home/sleep 上发生了什么,并且我发现我的 VC方法中的断点在和通知中-viewWillLayoutSubviews的断点之后被命中(我试图停止所有更新一个异步回调函数)。-applicationWillResignActive-appplicationDidEnterBackground

这似乎没有任何意义。从应用程序的角度来看,如果在后台进行 UI 更新并不酷,为什么viewWillLayoutSubviews要在后台调用呢?

编辑:即使我的应用程序没有崩溃,它似乎也会这样做。难道只是 lldb 把事情搞砸了吗?

4

1 回答 1

1

我认为你只需要容忍这一点。根据此技术说明,您不能在后台进行任何 GLES 渲染。我的建议是让您的应用程序在applicationWillResignActive被调用时设置一个标志,然后在进行任何渲染工作之前检查该标志并且不执行该工作(也许只是调用-setNeedsDisplay视图,以便如果您的应用程序再次激活它会知道绘制该视图)。您似乎对被称为“迟到”的事实感到困扰viewWillLayoutSubviews,但我不明白这有多重要。(即布局!= 渲染)如果您的视图的-drawRect:方法在之后被调用,我会感到惊讶,applicationDidEnterBackground但我仍然会说,如果您的应用程序在后台,则检查标志而不是渲染是您的责任。

于 2013-08-23T15:48:49.360 回答