使用UIPicker设置TimeInterval功能

时间:2011-07-21 13:41:58

标签: iphone uipickerview nstimer

我有以下部分代码。当用户从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分钟”?

我如何设计代码来设置函数调用一次? 帮帮我吧?

1 个答案:

答案 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来保存标签和值。