Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 两次更新标签并在其间调用sleep()——只看到第二次更新_Objective C_Cocoa_Sleep - Fatal编程技术网

Objective c 两次更新标签并在其间调用sleep()——只看到第二次更新

Objective c 两次更新标签并在其间调用sleep()——只看到第二次更新,objective-c,cocoa,sleep,Objective C,Cocoa,Sleep,可能重复: 我想知道为什么这不起作用:睡眠和“无论什么”都会像预期的那样出现,而不是在睡眠函数(计算…)之前的NSString。标签为空持续1秒,然后显示第二个字符串。为什么呢 if ([label.text isEqualToString : @"1"]) { [label2 setText : [NSString stringWithFormat : @"Computing..."]]; sleep (1); [label2 setText : [NSString

可能重复:

我想知道为什么这不起作用:睡眠和“无论什么”都会像预期的那样出现,而不是在睡眠函数(计算…)之前的
NSString
。标签为空持续1秒,然后显示第二个字符串。为什么呢

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

这大概是在主线程上发生的。通过睡眠,您停止屏幕更新,因此不会显示第一次更改。然后,一旦线程恢复,您将再次更改文本,使其显示为以前从未设置过文本

编辑:

如果要修复它,最简单的方法是将睡眠调用和第二个
-setText:
更改为
[label2 PerformsSelector:@selector(setText:)withObject:[NSString stringWithFormat:@“which”]afterDelay:1.0]

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

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

您可以调用:

[self performSelector:@selector(updateLabel) withObject:nil afterDelay:1.0f];
然后让方法updateLabel:

[label2 setText:@"Whatever"];

用户触摸按钮时,实例方法(iAction)中可能出现、的重复,尤其是重复。我以为编译器读“自上而下”,我不知道如何让一个变量在另一个变量之前运行。。