class ViewController: UIViewController {
var check=UIApplication.didEnterBackgroundNotification{
didSet{
print("print some thing")
}
}
override func viewDidLoad() {
super.viewDidLoad()
}}
我在iPhone中运行此代码,当我进入后台时,它不执行打印
答案 0 :(得分:0)
哪里出了错
您的代码正确地声明了具有类类型的任何变量。
但是,创建UIApplication.didEnterBackgroundNotification
类型的class
实例并被NSNotification.Name
的{{1}}子类化是一个大错误。
在访问struct
变量时,您无法设置它,因为其不可更改的结构意味着您无法对其进行突变(向其分配值)。因此,属性观察器check
不会调用,因此打印也不会调用。这是错误。
解决方案:
我们可以使用didSet
来观察NotificationCenter
应用程序的前景到背景的转换,反之亦然。
来自Apple文档
对象在通知中心注册以接收通知 (NSNotification对象)使用 addObserver(_:selector:name:object :)或 addObserver(forName:object:queue:using :)方法。当对象添加时 本身作为观察者,它指定应该通知哪些通知 接收。因此,对象可能会多次调用此方法。 为了将自己注册为多个不同观察者的观察者 通知。
每个正在运行的应用都有默认的通知中心,您可以创建 新的通知中心可以组织特别的沟通 上下文。
尝试
前景
iOS
用于背景
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
}
有关更多信息,请访问
https://developer.apple.com/documentation/foundation/notificationcenter