0

NSTimers으로 시작하는 ViewController이 있습니다. 나는 이들 각각을 UIApplicationDidEnterBackgroundNotification에 옵서버로 추가하여 응용 프로그램이 백그라운드로 들어가면 멈출 수 있습니다. 잘 작동합니다.UITableViewController bar 단추의 옵저버를 추가 하시겠습니까?

[[NSNotificationCenter defaultCenter] 
addObserver:anotherTimer 
selector:@selector(goBackground) 
name:UIApplicationDidEnterBackgroundNotification 
object:nil]; 

.... 

- (void) goBackground { 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    [self invalidate]; 
} 

여기에 문제가있다 : 나는 또한 내 ViewControllers의 각각에 바 버튼 ("I"정보)를 추가 할 UITableViewController를 서브 클래스했다. Bar Button은 앱에 대한 정보를 보여주는 또 다른 ViewController을 엽니 다. 앱이 백그라운드로 들어가는 것처럼, 사용자가 Bar Button을 탭하면 모든 NSTimers이 멈추기를 원합니다.

NSTimers 사용자가 바 버튼을 탭한 시점을 확인하거나 ViewController이 종료 될 때 관찰자를 만드는 방법이 있습니까?

답변

0

대답은 내가 생각했던 것보다 훨씬 쉬웠다. 올바른 방법은 임의의 이름 (예 : 'infoButtonTapped')으로 새 알림을 만들고 모든 NSTimers를 옵저버로 추가하여 알림에 추가하는 것입니다.

[[NSNotificationCenter defaultCenter] 
addObserver:aTimer 
selector:@selector(goBackground) 
name:@"infoButtonTapped" 
object:nil]; 

사용자가 정보 표시 줄 버튼 게시물을 같은 이름으로 통지를 도청 할 때 호출 방법 :

응용 프로그램이 배경 ("goBackground")로 전환 할 때 알림 메시지가 전송 알림과 같은 메소드를 호출
[[NSNotificationCenter defaultCenter] postNotificationName:@"infoButtonTapped" object:self]; 

정보 표시 줄 단추를 누르면 모든 NSTimers의 goBackground 메서드가 호출됩니다.

알림을 처리하는 setObservers, removeObservers 및 goBackground 메소드가 포함 된 NSTimer 용 카테고리를 만들었습니다. 매우 잘 작동합니다.

NSTimers 중 하나가 (다른 goBackground 또는 여부) 무효화 될 때마다 나는 또한, 그것은 첫째 모든 알림에 옵저버로 제거해야합니다 참고해야 그렇지 않으면

[aTimer removeObservers]; 
[aTimer invalidate]; 

앱이 충돌합니다 이러한 알림 중 하나가 전송됩니다 ...

관련 문제