Не удается использовать пользовательский интерфейс обновления NSTimer

#ios #nstimer

#iOS #nstimer

Вопрос:

В моем приложении я хочу использовать NSTimer для обновления моего экземпляра UIButton, но название моей кнопки не изменилось по истечении времени. Мой код здесь:

 -(void)fireTimer{

    self.leftTime = 30;
    self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerAction) userInfo:nil repeats:YES];

    [self.timer fire];
}

- (void)timerAction
{
    self.leftTime--;
    NSLog(@"%d current runloop and mode is %@", self.leftTime, [NSRunLoop currentRunLoop].currentMode);

    [self.customBtn setTitle:[NSString stringWithFormat:@"leftTime:%d", self.leftTime] forState:UIControlStateNormal];

    if(self.leftTime == 0)
    {
        [self.customBtn setTitle:[NSString stringWithFormat:@leftTime :%d, self.leftTime] forState:UIControlStateNormal];
        [self.timer invalidate];
    }
}
  

И вывод NSLog правильный, когда self.TimeLeft == 0, моя кнопка может правильно изменить ее заголовок.

введите описание изображения здесь

Кто-нибудь может сказать мне, в чем проблема? Спасибо!

Комментарии:

1. [запуск автоспуска]; в данном случае является избыточным. Это не причина вашей проблемы, это просто избыточно

2. Я думаю, это должно сработать при условии, что вы создали соответствующий IBOutlet для своей кнопки. Я сделал то же самое, используя UILabel, и это сработало для меня. Просто проверьте соединения для вашей кнопки.

3. Мой IBOutlet в порядке, я изменяю свой код, и при последнем запуске селектора таймера

4. Ваш fireTimer выполняется в основном потоке или фоновом потоке?

5. Мой viewcontroller не создал никакого потока или не выполнил какой-либо фоновый код.

Ответ №1:

Я выясняю проблему, я использую KVO для наблюдения за self.leftTimer, когда срабатывает таймер, я устанавливаю свою button.enable = НЕТ, поэтому он не может изменить заголовок, а когда self.leftTime == 0, моя button.enable = ДА. Моя небрежность. Спасибо всем.