我正在使用故事板,ARC和导航控制器在Xcode 4.4 for iOS 5.1上开发一个简单的游戏。该应用程序在模拟器上完美运行,但不在设备上(iPhone 4 CDMA)。基本上,我有一个包含3个UIButtons的主菜单(Play Game,Options,Help)。当我点击Play Game然后尝试通过导航控制器后退按钮返回菜单时,应用程序在设备上崩溃。它在以下线程处停止:
Thread 1: EXC_BAD_ACCESS (code=1, address=0x70000008)
并指出以下内容:
0x35b4df78: ldr r3, [r4, #8]
我的代码中还有一点我调用popToRootViewContoller方法。它也在这里崩溃(与我想到的相同的线程错误)。但是,如果我注释掉viewWillDisappear方法,那么我可以来回切换,没有任何问题。选项和帮助屏幕不实现viewWillDisappear方法,并在设备上完美地来回切换。
我在viewWillDisappear方法下面有以下内容:
-(void)viewWillDisappear:(BOOL)animated
{
[tmrCountdown invalidate];
[tmrEclapsedTime invalidate];
[tmrMainEnemyMovement invalidate];
[tmrMoveSpawnedEnemies invalidate];
[tmrSpawnEnemies invalidate];
accInc=currPrefs.accelerometerSensitivity;
enemySpeedX=5.0;
enemySpeedY=5.0;
countdown=4;
ecMiliseconds=0;
randTime=0;
stopped=NO;
gameStarted=NO;
}
我在这里调用popToRoot方法:
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex==0)//cancel
{
//called here
[self.navigationController popToRootViewControllerAnimated:YES];
}
else //1 (Play Again)
{
[self reInit];
}
}
谢谢, MEHUL
答案 0 :(得分:0)
正如我从代码中看到的那样,您正在使计时器无效,如果您尝试使无效的无效(非重复计时器
),则可能会发生这种情况。repeats:NO
或发布计时器。这不是一个例外,所以你不能用@try块来捕获它。这是一个信号。你要做的是:
在您的计时器选择器中,您需要调用
[timer release]; // if you have allocated it
timer=nil;
...
Some action
在你的viewWillDisappear
中If (timer!=nil) {
[timer invalidate];
timer=nil;
}