2011-12-29 21 views
1

私はwhileループをviewControllerのviewDidLoadメソッドに配置しましたが、ビューコントローラをロードすると動作しなくなり、SIGTERMが表示されます。 whileループのコードは次のとおりです。whileループが動作しません

- (void)viewDidLoad 
{ 
while (appDelegate.gobletCheckInt == 0 || appDelegate.gobletCheckInt == 1) { 
    if (CGRectIntersectsRect(mainSprite.frame, getGobletImg.frame)) { 
     haveGobletImg.image = [UIImage imageNamed:@"Gold Goblet.png"]; 
    } 
} 

appDelegate = [[UIApplication sharedApplication]delegate]; 
getGobletImg.image = [UIImage imageNamed:@"Gold Goblet.png"]; 

}

これらの最後の2行はあまり重要ではありません。だから私はviewDidLoadにこれを入れてはいけないのですか?

答えて

1

appDelegateオブジェクトは、使用しようとすると記入されます。 appDelegateの割り当てをwhileループの上に移動する必要があるようです。

+0

これは機能しませんでした。その他の提案はありますか? –

+0

スタックトレースの一部を投稿できますか?アプリが終了したときにデバッガが停止するのはどのラインですか?メンバー変数の値は何ですか? whileループの上にappDelegateの割り当てを移動しなければ、上記の内容がどうなるかは分かりませんが、それ以上のものが必要な場合があります。あなたのコードをもっと見ることなく、言うことは難しいです。 – user1118321

0

無限ループが発生したため、ランタイムによって殺される可能性がありますか?どこでgobletCheckIntを0または1以外に設定しますか?たぶんあなたは:

NSLog(@"%d", appDelegate.gobletCheckInt); 

あなたのwhileループの中。

今私は本当に悪いアーキテクチャであることを義務的なtsk-tskをしなければならない。 :)ビューコントローラからアプリケーションデリゲートのプロパティをチェックするべきではありません。アプリケーションデリゲートは、アプリケーションの起動時や終了時など、UIApplicationからのメッセージを受信するためのものです。プロパティの状態を保持するためには使用しないでください。

+0

それは私が望むのは無限ループです。 gobletCheckIntは、1または0以外のものと決して等しくありません。私はループしたくないかもしれません。私が本当に望むのは、ループ内のコードが実行を継続することです。 –

+0

それをタイマーで実行する必要があります。基本的に無限ループに入ると、プログラムが応答しなくなるため、実行時に殺されるでしょう。 NSTimerのドキュメントを読んでください。もっと深くしたい場合は、プログラムの実行ループのスケジュールを立てることができますが、それはもう少し進んでいます。 (私は到達可能性テストのようなものに対してこれを行った) –

関連する問題