Swift 4 - 通知中心addObserver问题
每当Notification
到达并且App尝试执行其关联方法时,我都会崩溃并收到unrecognized selector
错误。 这里是我的代码 - 这是在viewDidLoad
:Swift 4 - 通知中心addObserver问题
let notificationCenter = NotificationCenter.default
notificationCenter.addObserver(self, selector: Selector(("sayHello")), name:NSNotification.Name(rawValue: "dataDownloadCompleted"), object: nil)
的sayHello()
方法很简单 - 看起来是这样的:
func sayHello() {
print("Hello")
}
我验证过Notification
成功发布,它到达成功 - 所以这不是问题。当应用程序在Notification
到达时采取行动 - 执行sayHello()
方法时发生崩溃。它不断给我,unrecognized selector
错误。
任何想法我做错了什么? (顺便说一句,这与Xcode 8完美配合,但现在Swift 4和Xcode 9的语法已经改变了[Xcode让我通过必要的代码修复/更新] - 但是崩溃仍在继续。)
您可以通过以下步骤提高代码:
extension Notification.Name {
static let dataDownloadCompleted = Notification.Name(
rawValue: "dataDownloadCompleted")
}
而且使用这样的:
let notificationCenter = NotificationCenter.default
notificationCenter.addObserver(self,
selector: #selector(YourClass.sayHello),
name: .dataDownloadCompleted,
object: nil)
但正如已经指出的那样,问题是由更改为#selector解决
你应该放弃NS前缀 –
是的,确切地说,谢谢;) –
名称不是通知的成员 - 问题快到4 –
如果您使用过'#selector',编译器会指出问题 - 'sayHello'必须是'@ objc'。比较https://*.com/q/44390378/2976878 – Hamish
使用像这样'#selector(yourVC.yourfunctionName)' – Mannopson
正如@Hamish所提到的,你应该使用'#selector(sayHello)'和你的方法签名也传递通知对象(放下NS前缀)'@objc func sayHello(_ notification:Notification)' –