Итак, у меня есть UIPopover с NSTimer. У этого есть различные BOOLS и свойства, чтобы сделать другие методы, но это не важно прямо сейчас. Я хочу знать, есть ли способ освободить и аннулировать таймер, когда родительский вид popover исчез? Я попробовал методы класса, чтобы сделать недействительными и освободить таймер, но они дали мне предупреждения SIGABRT и EXC_BAD_ACCESS. Я думаю, что это как-то связано с тем, что таймер должен был сказать dealloc, когда он уже был нулевым.Остановить NSTimer в UIPopover
Пара дополнительных факторов: 1. Таймер должен оставаться в силе и выделяться при пополнении. 2. Таймер должен сделать недействительным и dealloc, когда родительский вид исчез.
Любые предложения?
КОД:
//@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