Objective C - 循环更改标签文本

时间:2011-06-12 22:43:50

标签: objective-c loops text label

我有一个看起来像这样的循环

for(int x=0; x < 10; x++){
    [testLabel setText:[self randomString]];
    sleep(1);
}

randomString是一种从数组中返回随机字符串的方法。

我正在使用睡眠,因此实际上可以看到标签被更改。

循环工作正常,但标签仅在循环的最后一次迭代后才会更新。

有谁知道为什么会这样?还有办法解决它吗?

4 个答案:

答案 0 :(得分:4)

不要叫sleep()

当然不会在主线程上,并且在辅助线程中使用sleep通常是非常值得怀疑的。

在这种情况下,只需使用NSTimer实例定期更新值(如Wilbur所说)。

答案 1 :(得分:3)

UI仅在运行循环结束时更新,其循环在单次迭代中运行。您应该使用NSTimer代替。

答案 2 :(得分:0)

要获得更新,您应该单独运行:

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

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

答案 3 :(得分:0)

如果你在后台线程上运行你的字符串会更好

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

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

我不会使用sleep(),并且计时器工作量太大。