2015-08-28 3 views
1

У меня много вопросов, как на stackoverflow, но со мной. Я все еще не могу остановить свой NSTimer. Ниже мой код:Невозможно остановить 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 на кнопку нажал. и resetTimmerLabel на видWillDisappear но функция времяStick все еще бежать. Помогите мне

Редактировать Извините за мою тупую ошибку. Проблема в том, что я создаю еще один новый таймер var timer. Она должна self.timer в функцию setupTimerForRecord

ответ

1

Я думаю, это потому, что вы создаете дублируемую локальную переменную, называемую таймером в setupTimerForRecord(). Установите вместо этого 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) 
    }) 
} 
+0

Ты прав. Я приму ваш ответ как можно скорее. Спасибо. – lee

1
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(), которая обычно требуется в других функциях.

+0

Не со мной, но метод ** запланированныйTimerWithTimeInterval ** создаст и вернет таймер. Он не нуждается в добавлении ** var timer = NSTimer() ** – lee

+0

ohk. получил это чувак –

Смежные вопросы