我遇到的问题是我的应用程序在睡眠时崩溃,有时在家中崩溃。我在一个名为BAD_ACCESS
的帖子中收到gpus_ReturnNotPermittedKillClient
错误,它告诉我我的应用程序正在后台进行UI更改,这对我的理解是不行的。因此,我正在逐步查看我的代码以查看home / sleep上发生的情况,并且我发现我的VC -viewWillLayoutSubviews
方法中的断点在-applicationWillResignActive
和{{1}中的断点之后被击中通知(我试图从异步回调函数中停止所有更新)。
这似乎没有任何意义。从应用程序的角度来看,如果在后台进行UI更新并不酷,为什么在后台调用-appplicationDidEnterBackground
之后呢?
编辑:即使我的应用程序没有崩溃,它似乎也会这样做。它可能只是让事情变得无序吗?
答案 0 :(得分:1)
我认为你只需要容忍这一点。根据此tech note,您无法在后台执行任何GLES渲染。我的建议是你的应用程序在调用applicationWillResignActive
时设置一个标志,然后在做任何渲染工作之前检查那个标志并且不做这项工作(也许只需要调用-setNeedsDisplay
查看,以便如果您的应用再次变为活动状态,它将知道绘制该视图)。你似乎对viewWillLayoutSubviews
被称为“迟到”的事实感到困扰,但我不明白这是多么重要。 (即布局!=渲染)如果你的-drawRect:
方法在applicationDidEnterBackground
之后被调用,我会感到惊讶,但我仍然会说你有责任检查一个标志而不是渲染你的app在后台。