我有以下部分代码。当用户从UIpicker中选择任何时间间隔时,它正在执行。
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分钟”。然后会发生什么?计时器是否设置为“5分钟”或者它将设置为“1分钟”和“5分钟”?
我如何设计代码来设置函数调用一次? 帮帮我吧?
答案 0 :(得分:0)
每次调用此方法时,您都会安排一个新的计时器,因此在您的示例中,您将同时获得这两个计时器。
基本上这个原因,我通常不鼓励scheduledTimerWithTimeInterval:...
。您现在无法取消计时器。您应该像这样创建一个NSTimer*
ivar:
@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
来决定值,或者您可以将{digaries或对象添加到arrayNo
来保存标签和值。