使用scheduledTimerWithTimeInterval的NSDate错误:额外的参数'选择器'在电话中

时间:2014-09-29 14:55:18

标签: xcode swift nstimer

我无法弄清楚为什么Xcode会抛出错误"额外的参数'选择器'在电话中。"方法签名很好,没有额外的选择器'论点。此外,自动完成方法会启动方法,但是按Option键单击scheduledTimerWithTimeInterval表示"没有快速帮助"并且字体是黑色而不是紫色,就好像编译器没有识别它一样。这是代码:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var timerLabel: UILabel!
    @IBOutlet weak var startButton: UIButton!
    @IBOutlet weak var stopButton: UIButton!
    var timer = NSTimer()

    override func viewDidLoad() {
        super.viewDidLoad()

        startButton.layer.cornerRadius = 5.0
        stopButton.layer.cornerRadius = 5.0

        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBAction func didPressStartButton(sender: AnyObject) {

    timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector:Selector("updateTimeLabel"), userInfo: NSDate(), repeats: TRUE)

    }
    func updateTimerLabel() {


    }
}

2 个答案:

答案 0 :(得分:2)

尝试使用true代替TRUETRUE未在Swift中定义,因此调用无法编译。 Swift错误是晦涩的 - 它通常无法获得正确的失败点。

    timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector:Selector("updateTimeLabel"), userInfo: NSDate(), repeats: true)

在Playground中运行良好。

更新的 它也可能值得指出Selector()'功能'是多余的 - 函数的字符串名称 - 在这种情况下为"updateTimeLabel" - 同样有效。

答案 1 :(得分:0)

当我在第一个参数中有一个无效参数时,我也收到了这个错误:

    var delayHighlight = 2
    var theDelay = fastPlay ? 0.0 : delayHighlight
    if playerRank > aiRank {
        var timer = NSTimer.scheduledTimerWithTimeInterval(theDelay,target:self,selector:"showPlayerOutline",userInfo:nil,repeats:false)
    }

问题是因为delayHighlight被视为一个整数,因此,变量theDelay也被视为一个整数。将第一行更改为:

var delayHighlight = 2.0

所以,如果这不是你的问题,我建议查看每个参数,看看它是否是正确的类型。