问题同时用UIApplication的聘用他们观察员()

问题描述 投票:1回答:1
class ViewController: UIViewController {
var check=UIApplication.didEnterBackgroundNotification{


    didSet{

        print("print some thing")
    }
}

override func viewDidLoad() {
    super.viewDidLoad()


 }}

我在运行我的iPhone的代码,当我输入的背景是不执行打印

ios swift appdelegate observers
1个回答
0
投票

哪里是错的

您的代码与一个类类型的任何变量的声明的正确方法。

然而,有很大的错误创建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

© www.soinside.com 2019 - 2024. All rights reserved.