ストーリーボード、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];
}
}
ありがとう、メフル