Вызов метода NSTimer

Я новичок в работе с таймерами на iPhone, и мне нужна поддержка.

У меня есть метод, как показано ниже, который занимает время и обновляет UILabel в моем userinterface. У меня также есть NSTimer, который вызывает этот метод раз в секунду (я показываю только часы и минуты). Это работает просто отлично, за исключением первой секунды, когда приложение работает (насколько я понимаю, требуется одна секунда, прежде чем timer вызовет метод).

Я хотел бы вызвать свой метод из viewDidLoad, но как я могу предоставить правильные аргументы? Или есть лучший способ сделать это?

// Timer for updating time
[NSTimer scheduledTimerWithTimeInterval:1.0f 
                                 target:self 
                               selector:@selector(updateTime:) 
                               userInfo:nil 
                                repeats:YES];   


-(void)updateTime: (NSTimer *) timer {

    currentTime = [NSDate date];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    // display in 12HR/24HR (i.e. 11:25PM or 23:25) format according to User Settings
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle];
    NSString *currentTimeString = [dateFormatter stringFromDate:currentTime];
    [dateFormatter release];

    timeLabel.text =  currentTimeString;
}

Ценю все, что укажет мне правильное направление.


person Structurer    schedule 22.06.2010    source источник


Ответы (2)


В вашем методе вы не используете переменную таймера, верно? Итак, зачем просто звонить [self updateTime:nil]. Это должно работать

person vodkhang    schedule 22.06.2010
comment
Да, ты прав. Такое простое и аккуратное решение. Проверено и работает нормально. Спасибо! Кажется, это также решение с огнем, которое позволяет запускать событие таймера, но у меня еще не было времени его протестировать. - person Structurer; 22.06.2010

Еще один вариант... можно сделать:

[NSTimer scheduledTimerWithTimeInterval:0.01f 
                                 target:self 
                               selector:@selector(updateTime:) 
                               userInfo:nil  
                                repeats:NO];    

[NSTimer scheduledTimerWithTimeInterval:1.0f 
                                 target:self 
                               selector:@selector(updateTime:) 
                               userInfo:nil 
                                repeats: YES];
person ohho    schedule 22.06.2010
comment
Спасибо, Гораций. Я думаю, что все же выберу решение водкханга. - person Structurer; 22.06.2010