Страницы

Поиск по вопросам

вторник, 25 февраля 2020 г.

NSTimer приостанавливает выполнение при скролле uitableView

#objective_c #uitableview


Есть UIVew c кнопкой старт,  UILabel  в который записывается текущее время и uitableView,
в котором время сохраняется (как простой стандартный таймер)
Проблема в том, что при скролле таблицы - таймер замерзает, как сделать чтобы они
работали синхронно ?
имею такой таймер 
- (IBAction)startTimer {
    _startButton.hidden = YES;
    _stopButton.hidden = NO;

    isRun = YES;

    UIBackgroundTaskIdentifier bgTask = UIBackgroundTaskInvalid;
    UIApplication *app = [UIApplication sharedApplication];
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:bgTask];
    }];

    myTimer = [NSTimer scheduledTimerWithTimeInterval:0.01f
                                               target:self
                                             selector:@selector(tick)
                                             userInfo:nil
                                              repeats:YES];

}

и функию 
- (void)tick {

    _timeSot++;

    sot++;

    if (_timeSot > 99) {
        _timeSot = 0;
        _sec++;
    }
    if (_sec > 59) {
        _sec = 0;
        _min++;
    }
    //_min = _sec / 60;

    NSString *sotStr;
    if (_timeSot < 10) {
        sotStr = [NSString stringWithFormat:@"0%d", _timeSot];
    } else {
        sotStr = [NSString stringWithFormat:@"%d", _timeSot];
    }

    NSString *secStr;
    if (_sec < 10) {
        secStr = [NSString stringWithFormat:@"0%d", _sec];
    } else {
        secStr = [NSString stringWithFormat:@"%d", _sec];
    }

    NSString *minStr;
    if (_min < 10) {
        minStr = [NSString stringWithFormat:@"0%d", _min];
    } else {
        minStr = [NSString stringWithFormat:@"%d", _min];
    }

    myTime = [NSString stringWithFormat:@"%@:%@:%@", minStr, secStr, sotStr];

    if (sot >= ([[[_exerises objectAtIndex:_indexExercise] objectForKey:@"timeWorkOutExerciseClient"]
intValue] * 100)) {
        [self stopTimer];
        [self sendNotification];
    }

    [_timeLabel setText:myTime];
}
    


Ответы

Ответ 1



Проблема решена: [[NSRunLoop mainRunLoop] addTimer:myTimer forMode:NSRunLoopCommonModes];

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

Отправить комментарий