だから、NIPimerを持つUIPopoverを持っています。他のメソッドを実行するために、さまざまなBOOLSとプロパティがありますが、それは今のところ重要ではありません。私が知りたいことは、Popoverの親ビューが消えたときにタイマーを解放して無効にする方法があるかどうかです。私はクラスメソッドを無効にして、タイマーをリリースしようとしましたが、彼らは私にSIGABRTとEXC_BAD_ACCESSの警告を与えました。私はそれが既に無かったときにdeallocに言われているタイマーと関係があると思います。UIPopoverでNSTimerを停止する
カップル余分な要因:ポップオーバーが却下されたときに 1.タイマーが有効のままとalloc'dなければなりません。 2.親ビューが消えた場合、タイマーは無効化と解除が必要です。
提案がありますか?
CODE:
//@interface
NSTimer *clickTimer;
@property (nonatomic, retain) NSTimer *clickTimer;
//.m
- (IBAction)clickerPressed:(id)sender
{
if ([click isClicking] == YES) {
[clickTimer invalidate];
[clickTimer release];
clickTimer = nil;
// enable the idle timer when the clicking is turned off
[[UIApplication sharedApplication] setIdleTimerDisabled:NO];
[click setIsClicking:NO];
[clickerButton setBackgroundImage:[UIImage imageNamed:@"wood.png"] forState:UIControlStateNormal];
[clickerButton setTitle:@"Start" forState:UIControlStateNormal];
[clickStatus setText:[NSString stringWithFormat:@"%d",[click numberOfBeatsToDisplay]]];
[click setClickCount:0];
}
else {
// disable the idle timer while the metronome is clicking.
[[UIApplication sharedApplication] setIdleTimerDisabled:YES];
[click setIsClicking:YES];
[clickerButton setBackgroundImage:[UIImage imageNamed:@"wood.png"] forState:UIControlStateNormal];
[clickerButton setTitle:@"Stop" forState:UIControlStateNormal];
[[NSThread currentThread] setThreadPriority:1.0];
clickTimer = [[NSTimer scheduledTimerWithTimeInterval:[click clickRateInSeconds] target:self selector:@selector(click:) userInfo:nil repeats:YES]retain];
}
}
でのdeallocの外で変数を解放常に常には、ゼロに設定します。 '[clickTimer release]; clickTimer = nilを; ' – Joe
編集、申し訳ありません –
CodaFi