EXC_BAD_ACCESS ошибка происходит с NotificationCenter, я думаю? - PullRequest
0 голосов
/ 18 февраля 2019

В настоящее время я должен получить доступ к экземпляру ViewController из AppDelegate.Но я обнаружил, что это не очень хорошая идея, поэтому я решил использовать

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 голосов
/ 18 февраля 2019

Изменить

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

На

@objc func applicationDidEnterBackground(_ notification : Notification) {

Это единственная легальная подпись для селектора уведомлений.Вам не разрешено создавать собственную подпись, как это пытается сделать ваш код.

...