0

ADBannerView をサブビューとして持つ GLKViewController サブクラスの実装があります。広告の読み込みとレンダリングは問題なく行われます。OpenGL アプリケーションも問題なく動作します。広告をクリックすると、ポップアップが表示されます。GLKViewController では、デフォルトの一時停止動作が有効になっています。

GLKViewController の setPaused にブレークポイントを設定すると、広告ポップアップが表示されている間にアプリから切り替える(ホームをダブルタップして別のアプリを選択する) と、 setPaused:NO が呼び出されることがわかります。この動作は、ADBannerView ポップアップが表示されている場合にのみ発生し、それ以外の場合にアプリから切り替えた場合には発生しません。

iOS 9.1 で Xcode 7 によって生成されたデフォルトの OpenGL テンプレート アプリでも、上記の動作を再現できます。

1) これは正常ですか?

2) setPaused:NO が呼び出された後、GLKViewController が再描画され、アプリがバックグラウンドにある間に OpenGL 操作が発生するため、これにより一貫した再現可能なクラッシュが発生します。この時点で、アプリは (正しく) 強制終了されます。

4

1 に答える 1

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];
}
于 2015-10-29T08:04:04.137 に答える