关于我的iOS应用程序,我有一点问题。 当我使用iOS模拟器5.1 ipad / iphone应用程序正常工作,但当我使用真正的iOS设备(iPad和iPhone 5.1)时
单击主页按钮后,应用程序在后台移动时崩溃... 有这个错误:
libGPUSupportMercury.dylib`gpus_ReturnNotPermittedKillClient:
0x33240094: trap
0x33240096: nop
我发现OpenGL ES仍在计算并使应用程序崩溃并找到了这个函数:glFinish();
但是这仍然不适用于我的代码示例:
- (void)applicationDidBecomeActive:(UIApplication *)application {
[[CCDirector sharedDirector] resume];
}
- (void)applicationWillResignActive:(UIApplication *)application {
glFinish();
[[CCDirector sharedDirector] pause];
}
我认为问题就在这里 有人知道我的问题吗? 感谢
编辑:
问题解决了:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[[CCDirector sharedDirector] stopAnimation];
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[[CCDirector sharedDirector] startAnimation];
}
也许这可以帮助某人x)
答案 0 :(得分:12)
在iOS 5.1中,强制要求在您被要求辞职后无法调用OpenGL。
- (void)applicationWillResignActive:(UIApplication *)application
是停止一切的地方,无论是CADisplayLink还是[[CCDirector sharedDirector] stopAnimation]
答案 1 :(得分:1)
从技术上讲,你可以调用OpenGL的最后一个方法是:
- (void)applicationDidEnterBackground:(UIApplication *)application
虽然在applicationWillResignActive之后暂停绘图通常是个好主意,但这只是一个推荐,一些应用程序有超出此要求的要求。实际上强制执行的是指您的应用移动到后台后无法进行任何OpenGL调用。
来自docs:
一旦您的应用程序退出其applicationDidEnterBackground:方法, 它不能进行任何新的OpenGL ES调用。如果你的申请成了 OpenGL ES调用,它由iOS终止。
另外,请记住将glFinish()作为最终的GL调用。
答案 2 :(得分:0)
检查屏幕上是否有FPS节点,它可能正在渲染..
*编辑 - 并检查音频播放