NSTimer 找不到选择器
NSTimer doesn't find selector
我想在 class 中使用不继承自 UIViewVontroller 的 NSTimer。我有 2 个文件:一个 ViewController 和一个像这样的 TimerClass :
ViewController:
import UIKit
class ViewController: UIViewController {
var timerClass = TimerClass()
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(animated: Bool) {
timerClass.launchTimer()
}
}
定时器类:
import Foundation
class TimerClass {
var timer = NSTimer()
init(){}
func launchTimer(){
var timer = NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: "timerEnd", userInfo: nil, repeats: true)
}
func timerEnd(){
println("That worked")
}
}
当我启动那个应用程序时,我崩溃了:
2015-01-12 19:48:24.322 Timer_TEST[5829:185651] *** NSForwarding: 警告: class 'Timer_TEST.TimerClass' 的对象 0x7fbc3be20710 未实现methodSignatureForSelector: -- 前面有麻烦
无法识别的选择器 -[Timer_TEST.supportFile timerEnd]
有什么想法吗?
谢谢
编辑: 请注意,从 Swift 2.2 开始,您将无法再犯此错误!您将使用新的 #selector
语法(参见 ),并且编译器不会让您为未公开给 Objective-C.[=20 的方法形成选择器=]
这只是将 Swift 函数公开给 Objective-C 以便 Objective-C 可见的问题。您有四个选择:
使 TimerClass 继承自 NSObject(并删除 init
实现):
class TimerClass : NSObject {
用 @objc
声明 TimerClass [不在 Swift 2.0 中;使用之前的选择]:
@objc TimerClass {
用@objc
声明函数:
@objc func timerEnd()
声明函数 dynamic
(这可能是最糟糕的选择,因为它是不必要的 - 该函数 不是 动态的;它不需要通过 Objective-C 就地更改,它只需要可见):
dynamic func timerEnd(){
我想在 class 中使用不继承自 UIViewVontroller 的 NSTimer。我有 2 个文件:一个 ViewController 和一个像这样的 TimerClass :
ViewController:
import UIKit
class ViewController: UIViewController {
var timerClass = TimerClass()
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(animated: Bool) {
timerClass.launchTimer()
}
}
定时器类:
import Foundation
class TimerClass {
var timer = NSTimer()
init(){}
func launchTimer(){
var timer = NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: "timerEnd", userInfo: nil, repeats: true)
}
func timerEnd(){
println("That worked")
}
}
当我启动那个应用程序时,我崩溃了:
2015-01-12 19:48:24.322 Timer_TEST[5829:185651] *** NSForwarding: 警告: class 'Timer_TEST.TimerClass' 的对象 0x7fbc3be20710 未实现methodSignatureForSelector: -- 前面有麻烦 无法识别的选择器 -[Timer_TEST.supportFile timerEnd]
有什么想法吗?
谢谢
编辑: 请注意,从 Swift 2.2 开始,您将无法再犯此错误!您将使用新的 这只是将 Swift 函数公开给 Objective-C 以便 Objective-C 可见的问题。您有四个选择: 使 TimerClass 继承自 NSObject(并删除 用 用 声明函数 #selector
语法(参见
init
实现):class TimerClass : NSObject {
@objc
声明 TimerClass [不在 Swift 2.0 中;使用之前的选择]:@objc TimerClass {
@objc
声明函数:@objc func timerEnd()
dynamic
(这可能是最糟糕的选择,因为它是不必要的 - 该函数 不是 动态的;它不需要通过 Objective-C 就地更改,它只需要可见):dynamic func timerEnd(){