今天测试程序时发现,处在发送系统的发送邮件界面时,将程序切换到后台,此时程序会崩溃
原因
在cocos2d中的appdelegate中:
// getting a call, pause the game
-(void) applicationWillResignActive:(UIApplication *)application
{
if( [navController_ visibleViewController] == director_ )
[director_ pause];
}
// call got rejected
-(void) applicationDidBecomeActive:(UIApplication *)application
{
if( [navController_ visibleViewController] == director_ )
[director_ resume];
}
-(void) applicationDidEnterBackground:(UIApplication*)application
{
if( [navController_ visibleViewController] == director_ )
[director_ stopAnimation];
}
-(void) applicationWillEnterForeground:(UIApplication*)application
{
if( [navController_ visibleViewController] == director_ )
[director_ startAnimation];
}
以上代码中,如果处在系统的发送邮件界面时,
[navController_ visibleViewController] == director_
这个判断不成立,因此系统无法执行暂停指令,还要在后台运行程序,因此而崩溃。
解决方法如下:
将以上的判断改为:
[[navController_ viewControllers] containsObject:director_] && director_.isViewLoaded && director_.view.window
此时问题就解决了