web-dev-qa-db-ja.com

アプリがバックグラウンドからフォアグラウンドに移行したかどうかを確認するiOS NSNotificationCenter

オブジェクトがバックグラウンドからフォアグラウンドに来るたびにオブジェクトを初期化する必要がある状況があり、それはappdelegateではなくNSNotificationCenterを使用する必要があるためです。 。

21
user3115014

UIApplicationWillEnterForegroundNotificationを試しましたか?

アプリは、applicationWillEnterForeground:を呼び出す直前にUIApplicationWillEnterForegroundNotification通知を投稿して、関心のあるオブジェクトに遷移に応答する機会を与えます。

通知を購読:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(yourUpdateMethodGoesHere:)
                                             name:UIApplicationWillEnterForegroundNotification
                                           object:nil];

呼び出す必要があるコードを実装します。

- (void) yourUpdateMethodGoesHere:(NSNotification *) note {
// code
}

購読を解除することを忘れないでください:

[[NSNotificationCenter defaultCenter] removeObserver:self];
31
Nikita Took

Swift 4.2

NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIApplication.willEnterForegroundNotification
            , object: nil)
20
Andrea Miotto

Swift 3バージョン

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    NotificationCenter.default.addObserver(self,
                                           selector:#selector(applicationWillEnterForeground(_:)),
                                           name:NSNotification.Name.UIApplicationWillEnterForeground,
                                           object: nil)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    NotificationCenter.default.removeObserver(self)
}

func applicationWillEnterForeground(_ notification: NSNotification) {
   ....
}

NSNotification.Name.UIApplicationDidBecomeActiveも使用できます

10
mt81

Swift 5

通知を購読-

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    NotificationCenter.default.addObserver(
      self,
      selector: #selector(applicationWillEnterForeground(_:)),
      name: UIApplication.willEnterForegroundNotification,
      object: nil)
}

サブスクリプションを削除-

override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        NotificationCenter.default.removeObserver(self)
} 

呼び出される関数-

@objc func applicationWillEnterForeground(_ notification: NSNotification) {
       self.volumeSlider.value = AVAudioSession.sharedInstance().outputVolume
    }
2
Kiran Jasvanee

Swift 3および4バージョン

NotificationCenter.default.addObserver(forName: NSNotification.Name.UIApplicationWillEnterForeground, object: nil, queue: nil) { notification in
        ...
}
1
omerx

Swift 4.1

 override func viewDidAppear(_ animated: Bool) {
        NotificationCenter.default.addObserver(self, selector: #selector(enterForeground), name: Notification.Name.UIApplicationWillEnterForeground, object: nil)
    }

    override func viewDidDisappear(_ animated: Bool) {
        NotificationCenter.default.removeObserver(self, name: Notification.Name.UIApplicationWillEnterForeground, object: nil)
    }

    @objc func enterForeground() {
       // Do stuff
   }
0
GSK