Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法停止NSTimer_Ios_Swift_Ios8_Nstimer - Fatal编程技术网

Ios 无法停止NSTimer

Ios 无法停止NSTimer,ios,swift,ios8,nstimer,Ios,Swift,Ios8,Nstimer,我知道在stackoverflow上有很多这样的问题,但我有。我仍然无法停止我的NSTimer。下面是我的代码: func setupTimerForRecord(){ dispatch_async(dispatch_get_main_queue(), { () -> Void in var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("ti

我知道在stackoverflow上有很多这样的问题,但我有。我仍然无法停止我的NSTimer。下面是我的代码:

func setupTimerForRecord(){
    dispatch_async(dispatch_get_main_queue(), { () -> Void in
        var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("timeStick:"), userInfo: nil, repeats: true)
    })
}
和功能停止:

func resetTimmerLabel(){
    dispatch_async(dispatch_get_main_queue(), { () -> Void in
        self.timer?.invalidate()
        self.timer = nil
        self.timeMin = 0
        self.timeSec = 0
        var timeString = String(format: "%02d:%02d", arguments: [self.timeMin, self.timeSec])
        self.lblTimer.text = timeString
    })
}
功能选择器:

func timeStick(timer: NSTimer){
    print("timeStick")
    self.timeSec++
    if self.timeSec == 60{
        self.timeSec = 0
        self.timeMin++
    }
    var timeString = String(format: "%02d:%02d", arguments: [self.timeMin, self.timeSec])
    lblTimer.text = timeString
}
单击按钮时调用setupTimerForRecord。而视图中的重置timermerlabel将消失,但功能timeStick仍在运行。请帮帮我

编辑对不起,我犯了个愚蠢的错误。问题是我创建了另一个新的单定时器var定时器。它必须将self.timer放入函数中setupTimerForRecord

var timer = NSTimer()

func setupTimerForRecord(){
    dispatch_async(dispatch_get_main_queue(), { () -> Void in
       self.timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("timeStick:"), userInfo: nil, repeats: true)
    })
}

全局创建计时器变量。我的意思是在所有功能之外。最佳做法是在viewDidLoad()之前创建所有变量,这些变量通常是其他功能所需要的。

我认为这是因为您在setupTimerForRecord()中创建了一个名为timer的重复局部变量。改为将其设置为self.timer

func setupTimerForRecord(){
    dispatch_async(dispatch_get_main_queue(), { () -> Void in
        self.timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("timeStick:"), userInfo: nil, repeats: true)
    })
}

你说得对。我会尽快接受你的回答。谢谢。不是我否决投票,而是scheduledTimerWithTimeInterval方法将创建并返回计时器。它不需要添加var timer=NSTimer()