EXC_BAD_ACCESS 我猜 NotificationCenter 发生错误?
EXC_BAD_ACCESS error occurs with NotificationCenter I guess?
目前我必须从 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 分析,但问题列表上没有任何内容。
我认为对象和内存分配有问题,但我仍然不明白我到底做错了什么。
改变
@objc func applicationDidEnterBackground(file: String = #file, line: Int = #line, function: String = #function) {
到
@objc func applicationDidEnterBackground(_ notification : Notification) {
这是通知选择器的唯一合法签名。您不能像您的代码试图做的那样编写自己的签名。
目前我必须从 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 分析,但问题列表上没有任何内容。
我认为对象和内存分配有问题,但我仍然不明白我到底做错了什么。
改变
@objc func applicationDidEnterBackground(file: String = #file, line: Int = #line, function: String = #function) {
到
@objc func applicationDidEnterBackground(_ notification : Notification) {
这是通知选择器的唯一合法签名。您不能像您的代码试图做的那样编写自己的签名。