-1

可能重复:
Obj-C -> 增加一个数字(并在 Cocoa 标签上显示步骤)

我想知道为什么这不起作用:睡眠和“任何”都按预期显示,而不是NSString在睡眠功能之前(计算......)。标签为空 1 秒,然后显示第二个字符串。这是为什么?

if ([label.text isEqualToString : @"1"]) {
    [label2 setText : [NSString stringWithFormat : @"Computing..."]];
    sleep (1);
    [label2 setText : [NSString stringWithFormat : @"Whatever"]];
}
4

3 回答 3

4

这大概发生在主线程上。通过休眠,您可以停止屏幕更新,因此不会显示第一个更改。然后,一旦线程恢复,您再次更改文本,使其看起来好像文本从未设置过。

编辑:
如果你想修复它,最简单的方法是更改​​睡眠呼叫,第二个-setText:[label2 performSelector:@selector(setText:) withObject:[NSString stringWithFormat:@"Whatever"] afterDelay:1.0];.

于 2012-07-15T01:39:53.773 回答
3

您可以致电:

[self performSelector:@selector(updateLabel) withObject:nil afterDelay:1.0f];

然后有方法updateLabel:

[label2 setText:@"Whatever"];
于 2012-07-15T01:55:51.033 回答
1

我的猜测是,当您调用 sleep() 函数时,实际的屏幕更新尚未发生,因此当您立即再次更新该字段时,这就是您最终在屏幕上看到的内容。

如果您确实需要确保第一个字符串在第二个字符串之前出现在屏幕上,您将必须确保显示已实际更新,而不仅仅是执行 sleep()。

于 2012-07-15T01:41:24.350 回答