2009-05-27 3 views
0

私は、iPhoneアプリのための簡単な概念実証に取り組んでいます(重要な情報もあり、Mac OSX開発にはまったく新しいものです)。私は、タイマー付きのビューベースのアプリケーションを作成しました。私は自分のアプリケーションのコントローラのインターフェイスに、@ propertyと@synthesizeを使ってNSTimerを宣言し、コントローラのviewDidLoadメソッドでscheduledTimerWithTimeIntervalメソッドで初期化しました。私のセレクタは、インタフェースで宣言され、コントローラの実装ファイルで定義されているシグニチャ-(void)someMethod:(NSTimer *)timerを持つメソッドです。私はタイマーを割り当て、それが有効なオブジェクトを指していることを確認する行を通過することができますが、私のプログラムはviewDidLoadメソッドの終わり以上には行かず、呼び出されたメソッドの最初の行でブレークポイントに到達しませんタイマーまた、この時点でxcodeのステータスバーにGDB: Program received bad signal: "EXC_BAD_ACCESS"が表示されています(viewDidLoadの最後に達しています)。私はIBで何もしませんでしたが、ビューとピッカーを追加するだけで、UIが実際にロードされているかどうかを確認できます。iPhoneビューベースのアプリでNSTimerを正しく使用していますか?

だから、NSTimerに何か間違っているのですか?それとも私のトラブルはどこですか? xcodeのデバッグツールを使用して詳細情報を取得するにはどうすればよいですか?

+2

コードを投稿できますか?おそらく間違ったセレクタをNSTimerに渡すか、@セレクタを使用しないでしょう。 –

+0

また、スタックは、EXC_BAD_ACCESS( "不正なポインタを追いかけた"というファンシートーク)を理解する上で最も有用なツールです。あなたが実際に墜落したときにどんなコードを書いていましたか?当時のフレームワークを使っていたら、何をしていたのですか? –

+0

あなたのように見える ":"セレクタを作成するとき それは以下の通りです: [NSTimer scheduledTimerWithTimeInterval:1ターゲット:セルフセレクタ:@selector(someMethod :) userInfo:nil repeats:YES]; – oxigen

答えて

3

EXC_BAD_ACCESSは通常、おそらくあなたのアプリのどこか他の場所のコードを見ることなく、メモリ管理エラーを示します。初心者のための非常に一般的なエラーですが、完全に理解するための重要なテーマです。ここではメモリ管理に関するいくつかの質問を調べ、見ていくためのガイドやチュートリアルをいくつか見つけることをお勧めします。実際には学ぶのはかなり簡単です。

また、火事イベントの間にタイマーにアクセスする必要がなければ、実際にインスタンス変数として格納する必要はありません。タイマーを作成して開始すると、タイマーはアプリケーションの実行ループに追加され、保持されます。

+0

ありがとうございます。私は他のすべてのものを取り除いたが、タイマーと私のタイマーのセレクターのいくつかの非常に基本的なコード、すべてが動作し、すべてのブレークポイントがヒットしました。この問題は実際にこの方法のどこかにあり、あなたが提案したようにメモリ管理と関係していると確信しています。 – Rich

2

NSZombieEnabledを取得しましたか?

これは、リリースされたオブジェクトでは失敗している場合に便利です。

+1

これは非常に良いアドバイスです。 NSZbomieEnabledはclangと一緒に私にとってとても便利でした。 – freespace