0

ストーリーボード、ARC、およびナビゲーションコントローラーを使用して、iOS 5.1 用の Xcode 4.4 で簡単なゲームを開発しています。アプリはシミュレーターでは完全に動作しますが、デバイス (iPhone 4 CDMA) では動作しません。基本的に、3 つの UIButtons (ゲームのプレイ、オプション、ヘルプ) を備えたメイン メニューがあります。[ゲームをプレイ] をクリックしてから、ナビゲーション コントローラーの [戻る] ボタンを使用してメニューに戻ろうとすると、デバイスでアプリがクラッシュします。次のスレッドで停止します。

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];
    }
}

ありがとう、メフル

4

1 に答える 1

0

コードからわかるように、タイマーを無効にしています。

repeats:NO

またはリリースされたタイマー。これは例外ではないので、@try ブロックでキャッチすることはできません。シグナルです。あなたがしなければならないことは次のとおりです。

タイマーセレクターで呼び出す必要があります

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

そしてあなたの見解ではWillDisappear

If (timer!=nil) { 
    [timer invalidate];
    timer=nil;
}
于 2012-08-03T20:44:17.407 に答える