Настройка функции TimeInterval с помощью UIPicker - PullRequest
0 голосов
/ 21 июля 2011

У меня есть следующая часть кода.Это выполняется, когда пользователь выберет любой интервал времени из 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 минуту», функция «updateMethod» будет вызвана через 1 минуту.Но давайте предположим, что пользователь снова изменил свое время на «5 минут» из UIPicker.Тогда что будет?Будет ли таймер установлен на «5 минут» ИЛИ будет ли он установлен на «1 минуту» и «5 минут» одновременно?

Как мне разработать код для установки вызова функции только один раз?Помогите мне в этом концепции?

1 Ответ

0 голосов
/ 21 июля 2011

Каждый раз, когда это вызывается, вы планируете новый таймер, поэтому в вашем примере вы получите оба.

Обычно я не рекомендую 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];

Это автоматически очистит старый таймер, когда вы установите новый таймер.

Обратите внимание, что логика базируется на строках пользовательского интерфейса (@«1 минута») нарушит локализацию, если вы когда-нибудь захотите перевести ее на другие языки.Вместо этого вы обычно либо просто используете row для определения значения, либо добавляете к arrayNo небольшие словари или объекты, которые будут содержать метку и значение.

...