【问题标题】:NSTimer doesn't find selector [duplicate]NSTimer 找不到选择器 [重复]
【发布时间】:2023-03-13 02:39:01
【问题描述】:

我想在不继承自 UIViewVontroller 的类中使用 NSTimer。我有 2 个文件:一个 ViewController 和一个 TimerClass :

视图控制器:

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: 警告: 'Timer_TEST.TimerClass' 类的对象 0x7fbc3be20710 未实现 methodSignatureForSelector: -- 麻烦 无法识别的选择器 -[Timer_TEST.supportFile timerEnd]

有什么想法吗?

谢谢

【问题讨论】:

  • 我对 Swift 知之甚少,但它要求提供一种方法,并且没有在您的自定义类上实现...您可以尝试这样做吗?
  • 你不应该在函数launchTimer中使用var timer,而应该只使用timer,因为你想访问该属性,对吧?

标签: swift nstimer


【解决方案1】:

编辑:请注意,从 Swift 2.2 开始,您将无法犯此错误!您将使用新的#selector 语法(请参阅https://stackoverflow.com/a/35658335/341994),并且编译器不会让您为未公开给 Objective-C 的方法形成选择器。


这只是将 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(){
    

【讨论】:

  • 谢谢,太完美了!
  • 它有效,谢谢。有什么逻辑解释吗?
  • @Rivera 这只是允许Objective-C 看到 Swift 函数的问题。您必须以某种方式故意将其暴露给 Objective-C。我已经修改了我的答案以提供一些进一步的方法。
  • 我会说@objc func timerEnd() 是最好的,因为它会检查函数签名是否符合Objective-C,否则@objc TimerClass 将继续崩溃。
  • 不能让它在泛型类中工作!这简直就是地狱
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 1970-01-01
相关资源
最近更新 更多