我猜NotificationCenter发生EXC_BAD_ACCESS错误?

时间:2019-02-18 20:28:43

标签: ios swift exc-bad-access nsnotificationcenter

当前,我必须从AppDelegate访问ViewController的实例。但是我发现这不是一个好主意,所以我决定使用

NotificationCenter.default.addObserver

相反。

这是我的代码。

*// ViewController*

override func viewDidLoad() {
    super.viewDidLoad()

    // Do some initial UI settings

    NotificationCenter.default.addObserver(self, selector: 
    #selector(applicationDidEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)

}

deinit {
    NotificationCenter.default.removeObserver(self)
}

// Check which object called this method
@objc func applicationDidEnterBackground(file: String = #file, line: Int = #line, function: String = #function) {
    // Do something I want to do... 
    print("applicationDidEnterBackground triggered by: \(file):\(line) : \(function)")
}

当我运行该应用并在按下主屏幕按钮时进入背景

Thread 1: EXC_BAD_ACCESS (code=1, address=0x1)

我在AppDelegate.swift中收到此错误。

我打开了“僵尸对象”选项,但是没有控制台输出。 我还尝试了Xcode Analyze,但问题列表上没有任何内容。

我认为对象和内存分配有问题,但是仍然无法理解我到底在做什么错。

1 个答案:

答案 0 :(得分:0)

更改

@objc func applicationDidEnterBackground(file: String = #file, line: Int = #line, function: String = #function) {

收件人

@objc func applicationDidEnterBackground(_ notification : Notification) {

这是通知选择器的唯一合法签名。您的代码会尝试这样做,因此您无法组成自己的签名。