【发布时间】:2023-03-28 10:05:01
【问题描述】:
每次Notification 到达并且应用程序尝试执行其关联方法时,我都会崩溃并收到unrecognized selector 错误。
这是我的代码 - 在viewDidLoad:
let notificationCenter = NotificationCenter.default
notificationCenter.addObserver(self, selector: Selector(("sayHello")), name:NSNotification.Name(rawValue: "dataDownloadCompleted"), object: nil)
sayHello() 方法非常简单 - 如下所示:
func sayHello() {
print("Hello")
}
我已验证 Notification 已成功发布并且它已成功到达 - 所以这不是问题。当应用程序通过执行sayHello() 方法在Notification 到达时采取行动时,就会发生崩溃。它一直给我unrecognized selector 错误。
任何想法我做错了什么? (顺便说一句,这与 Swift 3 和 Xcode 8 完美配合,但现在使用 Swift 4 和 Xcode 9,语法发生了变化 [Xcode 引导我完成了必要的代码修复/更新] - 但崩溃仍在发生。)
【问题讨论】:
-
如果你使用了
#selector,编译器就会指出问题所在——sayHello必须是@objc。比较stackoverflow.com/q/44390378/2976878 -
像这样使用
#selector(yourVC.yourfunctionName) -
正如@Hamish 已经提到的,您应该使用
#selector(sayHello)和您的方法签名,您还应该传递通知对象(删除NS 前缀)@objc func sayHello(_ notification: Notification) -
@Mannopson 不需要传递视图控制器前缀。顺便说一句,它应该总是以大写字母开头
-
@LeoDabus 我总是使用
self而不是viewControllerName。示例:#selector(self.functionName)
标签: swift nsnotificationcenter xcode9 addobserver