viewWillDisappear导致应用程序崩溃在设备上但不在模拟器上崩溃

时间:2012-08-03 20:27:23

标签: iphone objective-c ios ios-simulator

我正在使用故事板,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

1 个答案:

答案 0 :(得分:0)

正如我从代码中看到的那样,您正在使计时器无效,如果您尝试使无效的无效(非重复计时器

),则可能会发生这种情况。
repeats:NO

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

在您的计时器选择器中,您需要调用

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

在你的viewWillDisappear

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