Цель C - цикл для изменения текста метки - PullRequest
1 голос
/ 13 июня 2011

у меня есть цикл, который выглядит такможно увидеть, что этикетка меняется.

Цикл работает нормально, но метка обновляется только после последней итерации цикла.

Кто-нибудь знает, почему это может быть?И будет ли способ это исправить?

Ответы [ 4 ]

4 голосов
/ 13 июня 2011

Не звоните спать ()

Конечно, не всегда в главном потоке, и любое использование sleep во вторичных потоках, как правило, вызывает большие сомнения.

В этом случае просто используйте экземпляр NSTimer для периодического обновления значения (как сказал Уилбур).

3 голосов
/ 13 июня 2011

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

0 голосов
/ 08 июня 2013

Лучше, если вы запустите свою строку в фоновом потоке

[self performSelectorInBackground:@selector(updateBusyLabel:) withObject:[NSString stringWithFormat:@"Processing ... %i",iteration]];

-(void)updateBusyLabel:(NSString *)busyText {
    [_busyLabel setText:busyText];
}

Я бы не использовал sleep (), а таймер - это слишком много работы.

0 голосов
/ 13 июня 2011

Чтобы получить обновление, вы должны запустить его отдельно:

for(int x=0; x < 10; x++){
    [self performSelectorOnMainThread:@selector(updateLabel) withObject:nil waitUntilDone:NO];
    sleep(1);
}

- (void) updateLabel {
    [testLabel setText:[self randomString]];
}
...