Timer.scheduledTimer(timeInterval: 5.0, target:self.notificationView, selector: #selector(NotificationView.self.timerFired(_:)), userInfo: nil, repeats: false)
func timerFired(_ timer: Timer) {
print("Timer Fired")
}
我不明白哪里出错了?如果目标是自我,那么一切正常。***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [_ SwiftValue timerFired:]:无法识别的选择器发送到实例0x7fc0baf46f60'
答案 0 :(得分:1)
问题出在selector
语法上,就像这样。
#selector(NotificationView.timerFired(_:))
注意: self
适用于当前ViewController
,如果您想为其他人设置操作,则需要在您的情况下指定class name.method
NotificationView.timerFired
{1}}。
答案 1 :(得分:1)
我尝试以下代码并触发 NotificationView.timerFired :
class NotificationView {
@objc func timerFired(_ timer: Timer) {
print("Timer Fired")
}
}
class ViewController: UIViewController {
let notificationView = NotificationView()
override func viewDidLoad() {
super.viewDidLoad()
Timer.scheduledTimer(
timeInterval: 5.0,
target:self.notificationView,
selector: #selector(NotificationView.timerFired(_:)),
userInfo: nil,
repeats: false
)
}
}
答案 2 :(得分:0)
检查错误消息的这一部分:
[_ SwiftValue timerFired:]
timerFired:
是选择器的Objective-C样式表示法。似乎您的#selector(...)
正在运作。 (虽然不推荐......)
_SwiftValue
是作为选择器目标的对象的类名。这意味着您的目标target:self.notificationView
已转换为_SwiftValue
。
当您将notificationView
声明为Optional或隐式解包时,可能会发生这种情况。如果是这样,试试这个:
Timer.scheduledTimer(timeInterval: 5.0, target: self.notificationView!, selector: #selector(NotificationView.timerFired(_:)), userInfo: nil, repeats: false)
(请不要错过!
之后的self.notificationView
。)
答案 3 :(得分:0)
下面的代码对我有用(在playground / swift 3中):
class SomeClass {
@objc public func timerFired(_ timer: Timer) {
print("Timer Fired")
}
}
let s = SomeClass()
Timer.scheduledTimer(timeInterval: 5.0, target:s, selector: #selector(s.timerFired(_:)), userInfo: nil, repeats: false).fire()
//This also will work
//Timer.scheduledTimer(timeInterval: 5.0, target:s, selector: #selector(SomeClass.timerFired(_:)), userInfo: nil, repeats: false).fire()