2012-08-03 106 views
0

我正在开发iOS 5.1的Xcode 4.4上使用故事板,ARC和导航控制器的简单游戏。该应用程序在模拟器上完美工作,但不在设备上(iPhone 4 CDMA)。所以基本上,我有一个主菜单3 UIButtons(玩游戏,选项,帮助)。当我点击Play游戏然后尝试通过导航控制器后退按钮返回菜单时,该应用程序在设备上崩溃。它停在以下螺纹:viewWillDisappear导致应用程序崩溃在设备上,但不是在模拟器上

Thread 1: EXC_BAD_ACCESS (code=1, address=0x70000008) 

,并指出以下几点:

0x35b4df78: ldr r3, [r4, #8] 

还有一个在我的代码点我打电话的popToRootViewContoller方法。它也在这里崩溃(与我想象的相同的线程错误)。但是,如果我注释掉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方法在这里:

我见的viewWillDisappear方法在下列

-(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

打开异常断点,看看你能不能找出到底是哪行正在抛出异常 – 2012-08-03 20:33:33

+0

我正在做与丹一样的评论。请参阅添加异常断点:http://developer.apple.com/library/ios/#recipes/xcode_help-breakpoint_navigator/articles/adding_an_exception_breakpoint.html#//apple_ref/doc/uid/TP40010433-CH1-SW1 – Darren 2012-08-03 20:34:31

+2

并启用僵尸检查,你可能会引用一个已经发布的对象 – CSmith 2012-08-03 20:36:48

回答

0

当我从代码中看到的,你是使计时器无效,并且如果您尝试使无效计时器无效(非重复计时器

repeats:NO 

或释放计时器。这不是一个例外,所以你不能用@try块来捕捉它。这是一个信号。你所要做的是:

在你的计时器选择你需要调用

[timer release]; // if you have allocated it 
timer=nil; 
... 
Some action 

并在您的viewWillDisappear

If (timer!=nil) { 
    [timer invalidate]; 
    timer=nil; 
} 
+0

嗨,这不起作用,因为我的计时器似乎永不停止,或者停止并偶尔开始。这是因为我的计时器重复设置为yes吗? – mpatel 2012-08-04 19:48:32

相关问题