我有一个看起来像这样的循环
for(int x=0; x < 10; x++){
[testLabel setText:[self randomString]];
sleep(1);
}
randomString是一种从数组中返回随机字符串的方法。
我正在使用睡眠,因此实际上可以看到标签被更改。
循环工作正常,但标签仅在循环的最后一次迭代后才会更新。
有谁知道为什么会这样?还有办法解决它吗?
答案 0 :(得分:4)
答案 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(),并且计时器工作量太大。