2011-07-21 39 views
0

我有以下部分代碼。當用戶將從UIpicker選擇任何時間間隔時,它正在執行。使用UIPicker設置TimeInterval函數

if([[arrayNo objectAtIndex:row] isEqualToString:@"1 minutes"]) 
    time=60; 

if([[arrayNo objectAtIndex:row] isEqualToString:@"5 minutes"]) 
    time=300; 

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

我在UIPicker「1分鐘」和「5分鐘」中定義了兩次。假設一旦用戶選擇「1分鐘」,則在1分鐘的時間段內將調用功能「updateMethod」。但假設用戶再次將他的時間從UIPicker更改爲「5 mnutes」。那麼會發生什麼?定時器將被設置爲「5分鐘」,或者它將被設置爲「1分鐘」和「5分鐘」兩者?

我將如何設計代碼來設置函數調用一次? 幫我理解它嗎?

回答

0

每次調用這個函數時,您都會計劃一個新的計時器,所以在您的示例中,您將獲得兩個計時器。基本上這個原因,我一般不鼓勵scheduledTimerWithTimeInterval:...。您現在無法取消您的計時器。您應該創建一個NSTimer*伊娃這樣的:當你設置新的計時器

@interface ... { } 
@property (nonatomic, readwrite, retain) NSTimer *updateTimer; 
@end 

@implementation ... 
@synthesize updateTimer=updateTimer_; 

- (void)setUpdateTimer:(NSTimer *)aTimer { 
    if (aTimer != updateTimer_) { 
    [aTimer retain]; 
    [updateTimer_ invalidate]; 
    [updateTimer_ release]; 
    updateTimer_ = aTimer; 
    } 
} 
... 
self.timer = [NSTimer timerWithTimenterval:60 target:self selector:@selector(updateMethod) userInfo:nil repeats:YES]; 

這將自動清除舊的計時器。

請注意,基於UI字符串(@「1分鐘」)的邏輯將打破本地化,如果你想要將其翻譯成其他語言。相反,您通常要麼使用row來決定該值,要麼將小型詞典或對象添加到arrayNo以保存標籤和值。

+0

感謝post.I在「self.timer」上收到錯誤消息。抱歉,我是iphone應用程序中的新成員。 –

+0

我意外地聲明updateTimer是一個ivar而不是一個屬性。修正了上面的代碼。 –