2013-02-23 59 views
2

每次我完成我的NSTimer,我想使它無效並創建一個新的時間間隔,但它保持舊的時間間隔以及新的時間間隔。一旦我點擊offButton,我想使NSTimes無效。計時器停止打印「工作」,但當我以不同的時間間隔打電話給我的方法時,它會在兩個時間間隔內打印「工作」。無效和創建NSTimer

我的代碼是這樣的:

-(void) fireTimer{ 
    NSString *textValue = [sliderLabel text]; 
    float value = [textValue floatValue]; 

    [NSTimer scheduledTimerWithTimeInterval:value target:self selector:@selector(vibrate:) userInfo:nil repeats:YES]; 

} 

- (void) vibrate:(NSTimer*)timer { 
    if(_offButton.selected){ 
     [timer invalidate]; 
     timer=nil; 
    } 

    NSLog(@"Working"); 


} 
+0

問題已解決。剛添加{[_timer2 invalidate]; _timer2 = nil;}在offButton動作中。 – 2013-02-23 14:57:02

回答

3
  1. 您不是通過從UITextField直接獲取值來關注MVC設計模式。這些值應該存儲在模型對象中,MVC模式用於從文本字段獲取任何新值到模型中。你目前的實施非常微妙,並會在微風中打破。它還需要此代碼才能訪問UI元素,這非常不靈活;最好讓它訪問模型對象。

  2. 商店NSTimer *作爲一個實例變量,注意,如果您正在使用ARC則NSTimer保留目標(!!),所以使這個實例變量__weak打破保留週期。

  3. 如果你想要你的計時器重複,那麼根本沒有必要重置它;這隻需要在用戶改變時間時完成(見第1點!)。

  4. if (button_selected) do_vibrate;代碼移入定時器發射的方法。

1

失效碼您使用本身是正確的。但是,您可以更容易地將您的計時器作爲ivar或財產參考。

在這種情況下,您將定義避免製作一個計時器的多個實例。