-1

重複の可能性:
Obj-C->数値をインクリメントする(そしてCocoaラベルにステップを表示する)

なぜこれが機能しないのか疑問に思います。睡眠と「何でも」が期待どおりに表示されますがNSString、睡眠機能(計算中...)の前には表示されません。ラベルが1秒間空になると、2番目の文字列が表示されます。何故ですか?

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

3 に答える 3

4

これはおそらくメインスレッドで行われています。スリープすると、画面の更新が停止するため、最初の変更は表示されません。次に、スレッドが再開するとすぐに、テキストを再度変更すると、テキストが以前に設定されたことがないかのように表示されます。

編集:
それを修正したい場合、最も簡単な方法は、スリープコールを変更し、2番目-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() 関数を呼び出した時点では実際の画面更新はまだ行われていないため、その直後に再度フィールドを更新すると、それが画面に表示されることになります。

最初の文字列が 2 番目の文字列の前に画面に表示されることを本当に確認する必要がある場合は、sleep() を実行するだけでなく、表示が実際に更新されていることを確認する必要があります。

于 2012-07-15T01:41:24.350 に答える