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)
}
'IT story' 카테고리의 다른 글
PostgreSQL에서 자동 증가 기본 키를 기존 테이블에 추가하는 방법은 무엇입니까? (0) | 2020.05.25 |
---|---|
선택 해제 중 jQuery $ (“# radioButton”). change (…)가 실행되지 않음 (0) | 2020.05.25 |
javascript를 사용하여 * .CSV 파일에서 데이터를 읽는 방법은 무엇입니까? (0) | 2020.05.25 |
CSS로 문자열로 시작하는 ID를 선택하는 방법 (Javascript가 아닌)? (0) | 2020.05.25 |
분산 형 데이터 세트를 사용하여 MatPlotLib에서 히트 맵 생성 (0) | 2020.05.25 |