12

我对我的应用程序 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)

4

3 回答 3

12

在 iOS 5.1 中,强制要求您在被要求退出活动后无法调用 OpenGL。

- (void)applicationWillResignActive:(UIApplication *)application

是停止一切的地方,无论是 CADisplayLink 还是 [[CCDirector sharedDirector] stopAnimation]

于 2012-05-17T15:43:16.053 回答
1

从技术上讲,您可以从中进行 OpenGL 调用的最后一种方法是:

- (void)applicationDidEnterBackground:(UIApplication *)application

虽然在 applicationWillResignActive 之后暂停绘图通常是个好主意,但这只是一个建议,有些应用程序有超出此范围的要求。实际强制执行的是,一旦您的应用程序移至后台,您将无法进行任何 OpenGL 调用。

文档

一旦你的应用程序退出它的 applicationDidEnterBackground: 方法,它就不能进行任何新的 OpenGL ES 调用。如果您的应用程序进行 OpenGL ES 调用,它会被 iOS 终止。

此外,请记住将 glFinish() 作为您的最终 GL 调用。

于 2013-03-01T23:57:02.650 回答
0

检查屏幕上是否有 FPS 节点,它可能正在渲染..

*编辑 - 并检查音频播放

于 2013-09-11T11:26:38.963 回答