У меня есть несколько таймеров, запланированных для воспроизведения музыки с заданными интервалами. Я пытаюсь выяснить, правильно ли я их отменяю, так как мой код не работает из-за нижеуказанного исключения.
Я пытаюсь добавить все таймеры в NSMutableArray, а затем просто аннулировать каждый из них, чтобы предотвратить их срабатывание следующим образом:
[playTimers addObject:[NSTimer scheduledTimerWithTimeInterval:reminderDelay target:self selector:@selector(appMusicPlayerPlay:) userInfo:nil repeats:NO]];
Я ожидаю, что метод stop пройдет через массив и сделает недействительными таймеры. Должен ли я вызывать removeObject для таймера или проще перераспределить массив с помощью ARC?
[Обновлено: исправлено решение об отмене всех таймеров одновременно]
-(int)stop
{
[musicPlayer pause];
[self pause];
@try {
for(NSTimer* timer in playTimers)
{
[timer invalidate];
}
}
@catch (NSException *exception) {
NSLog(@"exception: %@",[exception description]);
}
@finally {
[playTimers removeAllObjects]
}
state = kRemoteControlStateStopped;
return state;
}
Вот исключение, которое я поймал после попытки удалить объект из NSMutableArray во время итерации по массиву:
*** Collection <__NSArrayM: 0x5429330> was mutated while being enumerated.