如果在观看游戏中心屏幕(排行榜,成就)时在iOS7中背景cocos2d 2.1应用程序崩溃

我在这里有100%可重现的崩溃。

如果在观看游戏中心屏幕(排行榜,成就)时在iOS7中背景cocos2d 2.1应用程序崩溃。 按下主页按钮时会立即崩溃。

CCGLView.m中第275行崩溃:

if(![_context presentRenderbuffer:GL_RENDERBUFFER]) 

令人痒的是,我下载了官方cocos2diphone 2.1的新副本,另外一个,安装了它的模板并运行了主要应用程序,之后将它连接到与已经有游戏中心排行榜等设置的有问题的应用程序相同的应用程序ID。 它没有崩溃。 所以我在lib里面的cocos2d文件夹上运行了一个diff,除了我在CCDrawingPrimitives.h / m中添加了一些C函数代码之外没有区别……应该不是问题。 所以问题不应该在cocos2d本身,但不知何故使用它或我的项目设置会导致它。

更新:

问题似乎是在2.1和之前使用的cocos2d应用程序模板中。 它看起来像这样:

 -(void) applicationDidEnterBackground:(UIApplication*)application { if( [navController_ visibleViewController] == director_ ) [director_ stopAnimation]; } 

这里明显的错误是如果你有navController打开一个游戏中心控制器,那么当按下home按钮时,director_的visibleViewController将是GC控制器,因此不会调用stopAnimation。 这导致iOS7崩溃,但似乎没有iOS6 …也没有模板cocos2d 2.1应用程序(仍然在这里混淆)。

目前的修复是注释if( [navController_ visibleViewController] == director_ )以便始终调用stopAnimation。 不确定是否有任何副作用,但现在将继续这样做。

好决定。 我遇到了和你一样的问题,你的post让我弄清楚我的应用程序是如何崩溃的。

所以我的解决方案是在展示游​​戏中心之前停止导演动画

 [[CCDirector sharedDirector] stopAnimation] [[CCDirector sharedDirector] presentViewController:gcViewController animated:YES completion:nil]; 

然后在游戏中心视图中重新启动动画,关闭回调

 - (void) gameCenterViewControllerDidFinish:(GKGameCenterViewController *)gameCenterViewController { [[CCDirector sharedDirector] dismissViewControllerAnimated:YES completion:nil]; [[CCDirector sharedDirector] startAnimation]; } 

您的更新解决方案应该可以使用,但在此处相同,我不确定是否会有任何副作用。 我想这是一个更安全的方法来绕过游戏中心本身。

再次感谢您发布此问题!