IT story

applicationDidBecomeActive 처리- "뷰 컨트롤러가 앱이 활성화되는 것에 어떻게 대응할 수 있습니까?"

hot-time 2020. 5. 25. 08:11
반응형

applicationDidBecomeActive 처리- "뷰 컨트롤러가 앱이 활성화되는 것에 어떻게 대응할 수 있습니까?"


나는이 UIApplicationDelegate으로 내 주요 AppDelegate.m 클래스에서 프로토콜을 applicationDidBecomeActive정의하는 방법.

응용 프로그램이 백그라운드에서 반환 될 때 메서드를 호출하고 싶지만 메서드가 다른보기 컨트롤러에 있습니다. applicationDidBecomeActive메서드에 현재 표시되는 뷰 컨트롤러를 확인한 다음 해당 컨트롤러 내의 메서드를 호출하려면 어떻게해야합니까?


응용 프로그램의 모든 클래스는 응용 프로그램의 다른 알림에 대한 "관찰자"가 될 수 있습니다. 뷰 컨트롤러를 생성 (또는로드) 할 때이를 관찰자로 등록하고 UIApplicationDidBecomeActiveNotification해당 알림이 애플리케이션으로 전송 될 때 호출 할 메소드를 지정해야합니다.

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(someMethod:)
                                             name:UIApplicationDidBecomeActiveNotification object:nil];

자신을 정리하는 것을 잊지 마십시오! 시야가 멀어지면 관찰자로 자신을 제거하십시오.

[[NSNotificationCenter defaultCenter] removeObserver:self 
                                                name:UIApplicationDidBecomeActiveNotification
                                              object:nil];

알림 센터 에 대한 추가 정보 .


스위프트 3, 4 상당 :

관찰자 추가

NotificationCenter.default.addObserver(self,
    selector: #selector(applicationDidBecomeActive),
    name: .UIApplicationDidBecomeActive, // UIApplication.didBecomeActiveNotification for swift 4.2+
    object: nil)

관찰자 제거

NotificationCenter.default.removeObserver(self,
    name: .UIApplicationDidBecomeActive, // UIApplication.didBecomeActiveNotification for swift 4.2+
    object: nil)

콜백

@objc func applicationDidBecomeActive() {
    // handle event
}

신속한 등가 2 :

let notificationCenter = NSNotificationCenter.defaultCenter()

// Add observer:
notificationCenter.addObserver(self,
  selector:Selector("applicationWillResignActiveNotification"),
  name:UIApplicationWillResignActiveNotification,
  object:nil)

// Remove observer:
notificationCenter.removeObserver(self,
  name:UIApplicationWillResignActiveNotification,
  object:nil)

// Remove all observer for all notifications:
notificationCenter.removeObserver(self)

// Callback:
func applicationWillResignActiveNotification() {
  // Handle application will resign notification event.
}

스위프트 4.2

관찰자 추가

NotificationCenter.default.addObserver(self, selector: #selector(handleEvent), name: UIApplication.didBecomeActiveNotification, object: nil)

관찰자 제거

NotificationCenter.default.removeObserver(self, name: UIApplication.didBecomeActiveNotification, object: nil)

이벤트 처리

@objc func handleEvent() {
}

Swift 4에서는 Apple이 새로운 컴파일러 경고를 #selector통해이 시나리오에서 사용하지 않는 것이 좋습니다 . 다음은이 작업을 수행하는 훨씬 안전한 방법입니다.

먼저 알림에 사용할 수있는 게으른 var를 만듭니다.

lazy var didBecomeActive: (Notification) -> Void = { [weak self] _ in
    // Do stuff
} 

당신이 포함 실제 통지가 필요한 경우, 바로 교체 _와 함께 notification.

다음으로 앱이 활성화되는 것을 관찰하기위한 알림을 설정했습니다.

func setupObserver() {
    _ = NotificationCenter.default.addObserver(forName: .UIApplicationDidBecomeActive,
                                               object: nil,
                                               queue:.main,
                                               using: didBecomeActive)
}

The big change here is that instead of calling a #selector, we now call the var created above. This can eliminate situations where you get invalid selector crashes.

Finally, we remove the observer.

func removeObserver() {
    NotificationCenter.default.removeObserver(self, name: .UIApplicationDidBecomeActive, object: nil)
}

참고URL : https://stackoverflow.com/questions/3639859/handling-applicationdidbecomeactive-how-can-a-view-controller-respond-to-the

반응형