オブジェクトがバックグラウンドからフォアグラウンドに来るたびにオブジェクトを初期化する必要がある状況があり、それはappdelegateではなくNSNotificationCenterを使用する必要があるためです。 。
UIApplicationWillEnterForegroundNotification
を試しましたか?
アプリは、applicationWillEnterForeground:
を呼び出す直前にUIApplicationWillEnterForegroundNotification通知を投稿して、関心のあるオブジェクトに遷移に応答する機会を与えます。
通知を購読:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(yourUpdateMethodGoesHere:)
name:UIApplicationWillEnterForegroundNotification
object:nil];
呼び出す必要があるコードを実装します。
- (void) yourUpdateMethodGoesHere:(NSNotification *) note {
// code
}
購読を解除することを忘れないでください:
[[NSNotificationCenter defaultCenter] removeObserver:self];
NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIApplication.willEnterForegroundNotification
, object: nil)
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
も使用できます
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
}
Swift 3および4バージョン
NotificationCenter.default.addObserver(forName: NSNotification.Name.UIApplicationWillEnterForeground, object: nil, queue: nil) { notification in
...
}
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
}