繁体   English   中英

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

[英]viewWillDisappear Causes App to Crash on Device but not on Simulator

我正在使用Storyboard,ARC和导航控制器在iOS 5.1的Xcode 4.4上开发一个简单的游戏。 该应用程序可以在模拟器上完美运行,但不能在设备(iPhone 4 CDMA)上运行。 因此,基本上,我有一个带有3个UIButton的主菜单(玩游戏,选项,帮助)。 当我单击Play游戏,然后尝试通过导航控制器的后退按钮返回菜单时,该应用程序在设备上崩溃。 它在以下线程处停止:

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

从代码中可以看出,您正在使计时器无效,如果您尝试使无效的计时器(非重复计时器)无效,则可能会发生这种情况

repeats:NO

或释放计时器。 这也不是例外,因此您无法使用@try块来捕获它。 这是一个信号。 您要做的是:

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

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

在您看来,WillDisappear

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM