UILabel отображает только нечетные объекты в NSArray

StackOverflow https://stackoverflow.com/questions/1804518

  •  05-07-2019
  •  | 
  •  

Вопрос

У меня есть int, который определяет objectAtIndex, который передает его в строку, которая затем отображает его в UILabel, ОДНАКО, когда я изменяю массив (в данном случае добавляю к нему слово), когда у меня есть UILabel, проходящий через массив он отображает только нечетные.Я сделал NSLog и обнаружил, что он ПЕРЕДАЕТ ВСЮ ОДНУ ВЕЩЬ в строку, но метка не отображает каждую из них, она делает это только в первый раз, затем я изменяю массив, и он делает только нечетные

редактировать:код:

- (void) stuff {
    NSArray *indivwords = [sentence componentsSeparatedByString:@" "];
    count = [indivwords count]; //count=int
    if (i < count) {
        NSString *chunk = [indivwords objectAtIndex:i];
        [word setText:chunk];

        NSLog(chunk);
        i++;
    } else {
        word.textColor = [UIColor greenColor];
        [word setText:@"DONE"];
    }
}

Все это контролируется NSTimer, который включает его в зависимости от значения ползунка.Также я установлен в 0 в IBAction.

Код IBAction:

word.textColor = [UIColor whiteColor];
[timer invalidate];
i = 0;

speedd = (1/speed.value)*60;



timer = [NSTimer scheduledTimerWithTimeInterval:(speedd) target:self selector:@selector(stuff) userInfo:nil repeats:YES];   

РЕДАКТИРОВАТЬ:

Я починил это!Я назвал это после того, как дошёл до счёта

 -(void)stoptimer
{
[timer invalidate];
timer = [NSTimer scheduledTimerWithTimeInterval:(.01) target:self selector:@selector(empty) userInfo:nil repeats:YES];  
}

«пусто» — это просто пустота, в которой нет ничего, ну, я всего лишь добавил комментарий,

//don't look over here, nothing to see here, oh look at that

Кто-то может закрыть это, если захочет

Это было полезно?

Решение

Вы сказали, что временной интервал вашего NSTimer контролируется ползунком.Возможно, вы запускаете новый экземпляр таймера каждый раз, когда меняете значение ползунка, поэтому после изменения у вас будет два таймеры работают.Первый обновляет метку и увеличивает i.Второй приходит сразу за первым и находит iзначение увеличилось, поэтому вместо текущего фрагмента отображается следующий.

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top