2011-12-09 10 views
0
if([timer isValid]) // << breakpoint here 
{ 
    NSLog(@"Timer Valid"); 
} 
timer = [NSTimer scheduledTimerWithTimeInterval:[timeinterval intValue] target:self selector:@selector(PlayDelaySound) userInfo:nil repeats:NO]; 

timerがスケジュールされていないときは初めて正常に機能します。しかし、その後の呼び出しでは、デバッグ中に、コンソールは私にログ(以下に示す)を1回のステップでログに記録します。その後、sigabrtを与えます。NSTimerはsigabrtを有効にしています

ヘルプ? おかげ

ログイン

Single stepping until exit from function objc_msgSend, 
which has no line number information. 
warning: Remote failure reply: E37 
Single stepping until exit from function objc_msgSend, 
which has no line number information. 
warning: Remote failure reply: E37 
+0

'sigbart'とは、SIGABRTを意味します。 – jv42

答えて

4

はたぶん、あなたはretainが欠けていますか?このよう

timer = [[NSTimer scheduledTimerWithTimeInterval:[timeinterval intValue] target:self selector:@selector(PlayDelaySound) userInfo:nil repeats:NO] 
     retain]; 

更新:あなたが保持していない場合は、タイマーインスタンスがいつか解放されてもよい、とisValidへのお電話は、クラッシュが発生するため。

+0

ありがとう。それはそれを解決した。私は今deallocの権利の解放メッセージを送信する必要がありますか? –

+1

はい。また、新しいものを作成する前にリリースを送信する必要があります。あるいは、 'self.timer = ...'を実行したときに2番目の部分を自動的に処理するプロパティ保持を作成することができます。そして、あなたはdeallocで 'self.timer = nil;'を実行するだけです。 – jv42

+0

私は新しいものを必要としません...基本的に私はインターフェイスで1つを作成しました...そしてコードの残りの部分は質問にありますので、deallocのタイマーリリースでは十分でしょうか? –

関連する問題