NSTimer 选择器中的方法无效

Posted

技术标签:

【中文标题】NSTimer 选择器中的方法无效【英文标题】:Method in NSTimer Selector is invalid 【发布时间】:2015-11-27 21:21:51 【问题描述】:
self.presentViewController(playerViewController, animated: true)
        self.playerViewController.player?.play()
        self.playerTimer = NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector:Selector("stopAfter4seconds:"), userInfo: nil, repeats: false)
    

    func stopAfter4seconds(timer: NSTimer)
    self.playerViewController.player?.pause()
    self.playerViewController.player = nil
    self.dismissViewControllerAnimated(true, completion: nil)
    self.presentViewController(GameViewController1(), animated: true, completion: nil)
    

所以.. 我已经尝试了几乎所有方法来让这个 NSTimer 正常工作,但似乎没有任何进展。 我试过了:

    在中间添加和删除冒号

    ("stopAfter4seconds:")
    

    在参数中添加和删除(timer:NSTimer)

    stopAfter4seconds()
    

    中添加和删除第二个选择器
    selector:Selector("stopAfter4seconds:")
    

我遇到的错误:

    stopAfter4seconds]:无法识别的选择器发送到实例 0x7bb1ae90

    由于未捕获的异常“NSInvalidArgumentException”而终止应用程序

    线程 1:信号 SIGABRT

我不知道我做错了什么,所以如果有人有任何想法,请告诉我。

【问题讨论】:

我无法得到你想要做的事情。 查看这个:***.com/a/27435406/2125010 【参考方案1】:

如果方法是这样定义的:

func stopAfter4seconds(timer: NSTimer)  ... 

然后你会像这样创建计时器:

NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: Selector("stopAfter4seconds:"), userInfo: nil, repeats: false)

或者您可以省略 Selector() 并执行以下操作:

NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: "stopAfter4seconds:", userInfo: nil, repeats: false)

不过,您似乎已经在调用presentViewController 的方法中实现了这个stopAfter4seconds 函数。这个stopAfter4seconds 本身必须是一个方法,而不是在另一个方法中定义。

【讨论】:

【参考方案2】:
import UIKit

class ViewController: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()
    

    override func viewDidAppear(animated: Bool) 
        print("run viewDidAppear")
        myFunction1()
    


    func myFunction1() 
        print("call timer")
        NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("myFunction2"), userInfo: nil, repeats: false)
    

    func myFunction2()
        print("do stuff")
    

【讨论】:

我的 NStimer 在方法 override func viewDidAppear(animated:Bool) 我是否应该将所有代码移动到一个新方法中,然后将该方法调用到 viewDidAppear 中? 我猜是这样,尝试将你的函数移到类中。 将我的函数移到顶部的整个类视图中,似乎没有帮助 你能简单解释一下你想什么时候运行NSTimer? 关闭presentViewController 之后?

以上是关于NSTimer 选择器中的方法无效的主要内容,如果未能解决你的问题,请参考以下文章

指定的演员对日期选择器无效

NSTimer 可以采用多个选择器吗?

无法识别的选择器发送到 NSTimer scheduleTimerWithTimeInterval 中的实例

如何更改日期选择器中的文本大小?

哪些字符在 CSS 类名/选择器中有效?

哪些字符在 CSS 类名/选择器中有效?