나는 미리 결정된 간격으로 음악을 재생할 수 있도록 여러 개의 타이머를 가지고 있습니다. 내 코드가 아래의 예외로 인해 작동하지 않는 것처럼 올바르게 취소하는지 확인하려고합니다.iPhone 4 iOS5 ARC로 여러 NSTimers를 올바르게 취소하는 방법은 무엇입니까?
내가있는 NSMutableArray 모든 타이머를 추가하려고하고 간단하게 다음과 같이 발사에서 그들을 방지하기 위해 그들의 각 하나 무효화 해요 :
[playTimers addObject:[NSTimer scheduledTimerWithTimeInterval:reminderDelay target:self selector:@selector(appMusicPlayerPlay:) userInfo:nil repeats:NO]];
내가 정지 방법은 배열을 통해 이동하고 무효로 기대를 타이머. 타이머에서 removeObject를 호출해야합니까? 아니면 배열을 ARC로 다시 할당하는 것이 더 쉬울까요?
[업데이트 : 여기에 한 번에 모든 타이머 취소에 수정 된 솔루션입니다] :
*** Collection <__NSArrayM: 0x5429330> was mutated while being enumerated.
여기
-(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에서 개체를 제거하는 후 잡기 된 예외의가
이것은 실제로 ARC와 관련이 없습니다. 비 ARC에서 동일한 예외가 발생합니다. for (in) 루프 내에서 콜렉션을 수정할 수 없습니다. –