观察者在使用Uiapplication()时遇到问题

时间:2019-02-06 12:13:33

标签: ios swift appdelegate observers

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


    didSet{

        print("print some thing")
    }
}

override func viewDidLoad() {
    super.viewDidLoad()


 }}

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

1 个答案:

答案 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