iOS:用户点击ADBannerView后切换应用导致OpenGL崩溃

时间:2015-10-29 08:02:51

标签: ios opengl-es iad adbannerview glkview

我有一个GLKViewController子类实现,ADBannerView作为子视图。广告加载和渲染就好了。 OpenGL应用程序也可以正常工作。单击广告时,将显示弹出窗口。 GLKViewController启用了默认的暂停暂停行为。

如果你在GLKViewController的setPaused上设置一个断点,你会注意到 setPaused:NO会在你离开你的应用程序时被调用(双击主页并选择另一个应用程序)广告弹出窗口可见。仅当ADBannerView弹出窗口可见时才会出现此行为,否则,如果您从应用程序切换,则不会发生此行为。

即使是iOS 9.1中由Xcode 7生成的默认OpenGL模板应用程序,我也可以重现上述行为。

1)这是正常的吗?

2)对我来说,这会导致一致的可重现崩溃,因为在setPaused:NO被调用之后,GLKViewController被重绘,导致在应用程序处于后台时发生OpenGL操作。该应用程序(正确)在此时被杀死。

1 个答案:

答案 0 :(得分:1)

我目前的解决方法是在应用程序未处于活动状态时放弃对setPaused:NO的调用,如下所示。这似乎工作正常,但为什么这种情况发生的事情让我感到困惑。

- (void)setPaused:(BOOL)paused
{
    long appState = (long)[UIApplication sharedApplication].applicationState;
    if (!paused && (appState != 0)) {
        NSLog(@"setPaused - REJECTING Unpause; %ld", appState);
        return;
    }
    [super setPaused:paused];
}