观察者在使用 Uiapplication() 时出现问题


class ViewController: UIViewController {
var check=UIApplication.didEnterBackgroundNotification{

didSet{
print("print some thing")
}
}
override func viewDidLoad() {
super.viewDidLoad()

}}

我在iPhone中运行此代码,当我进入后台时,它没有执行打印

哪里有问题

您的代码以正确的方式声明具有类类型的任何变量。

但是,创建UIApplication.didEnterBackgroundNotification实例存在很大的错误,该实例class

类型并由NSNotification.Name子类,这是一个struct

。当您访问check变量时,您无法设置它,因为它的不可变结构意味着您无法改变它(为其赋值)。因此,属性观察者didSet不会调用,因此打印也不会调用。这是错误。

溶液:

我们可以使用NotificationCenter来观察iOS应用程序的前景到背景的过渡,反之亦然。

来自苹果文档

对象向通知中心注册以接收通知 (NSNotification 对象) 使用 addObserver(_:selector:name:object:) or addObserver(forName:object:queue:using:) 方法。当对象添加时 本身作为观察者,它指定应该发出哪些通知 收到。因此,对象可以在 为了将自己注册为几个不同 通知。

每个正在运行的应用都有一个默认的通知中心,你可以创建 新的通知中心,特别是组织通信 上下文。

试试这个

对于前景

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
NotificationCenter.default.addObserver(self, selector: #selector(applicationDidEnterForeground), name: UIApplication.didBecomeActiveNotification, object: nil)
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
NotificationCenter.default.removeObserver(self, name: UIApplication.didBecomeActiveNotification, object: nil)
}
@objc private func applicationDidEnterForeground() {
//Do your stuff here
}

对于背景

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
NotificationCenter.default.addObserver(self, selector: #selector(applicationDidEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
NotificationCenter.default.removeObserver(self, name: UIApplication.didEnterBackgroundNotification, object: nil)
}
@objc private func applicationDidEnterBackground() {
//Do your stuff here
}

欲了解更多信息,请访问

https://developer.apple.com/documentation/foundation/notificationcenter

最新更新