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
应用的背景,反之亦然。
从苹果Doc.s
对象与通知中心注册使用的addObserver(_接收通知(NSNotification对象):选择器:名称:对象:)或的addObserver(的forName:对象:队列:使用:)方法。当一个对象本身添加作为观察者时,它指定应该接收的通知。因此,对象可以调用该方法若干次,以便将其自身注册为几个不同的通知观察者。
每个运行的应用程序有一个默认的通知中心,你可以创建新的通知中心,以组织在特定情况下的通信。
尝试这个
对于前景
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