xcode,Objective-Cについて質問です。

str1の値を以下のように変化させた際、NSLog上では正常に10個の乱数が1秒ごとに表示されるのに、画面上に表示するchar.textは最後の1回分しか表示されません。10回分変化させ表示させるにはどうすればいいのでしょうか?


- (IBAction)B1:(id)sender {

for (demo=0;demo<10;demo++)
{
[NSThread sleepForTimeInterval:1];

up = arc4random() % 6 +1;

NSString *str1 = [NSString stringWithFormat:@"%d", up];

self.chara.text = str1;
NSLog(str1);

}


}

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/04/20 03:10:41
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:gizmo5 No.1

回答回数504ベストアンサー獲得回数141

ポイント200pt

いろいろなやり方があると思いますが、待ちを入れる処理を別スレッドで動かすようにした場合にはこのような処理になると思います。

- (IBAction)B1:(id)sender {

	dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
	dispatch_queue_t mainQueue = dispatch_get_main_queue();
	dispatch_async(globalQueue, ^{

		for (demo=0;demo<10;demo++)
		{
			[NSThread sleepForTimeInterval:1];

			up = arc4random() % 6 +1;

			dispatch_async(mainQueue, ^{
				[self displayNumber:up];
			});

		}
	}


} 

- (void)displayNumber:(int)up
{
	NSString *str1 = [NSString stringWithFormat:@"%d", up];
	self.chara.text = str1;
	NSLog(str1);
}

大切なのは self.chara.text = str1; をしたときに、誰がどのタイミングで str1 の内容で画面を書き換えているかということの理解です。
一度、何かの書籍を通して読むことをお勧めします。

他1件のコメントを見る
id:gizmo5

あまり参考にはならないかもしれませんが、私が読んだのは、公式ドキュメントと、この本です。

他にもつまんだ程度ですけど何冊か読んだのですが、役に立たなくて記憶がありませんw

失礼かもしれませんが、あまりプログラミングの経験が無いように思います。
難しそうだとか余計なことは考えずに、動くコードをたくさん読んで実際に動かしてみる方が良いと思います。

2014/04/20 01:56:42
id:countd

なるほど、理屈こねこねよりも実践することが、プログラミングでは大切なんですね。
ともかくどんどん当たってみて、検索して、エラー出しながら頑張ってみます!

2014/04/20 03:10:31

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません