人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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/1件

▽最新の回答へ

1 ● gizmo5
●200ポイント ベストアンサー

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

- (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 の内容で画面を書き換えているかということの理解です。
一度、何かの書籍を通して読むことをお勧めします。


シオンさんのコメント
キューの概念は初めて知りました、これは難しい……。 手元にある本の中で、書いてあるのは多分ないです。入門書クラスしかない(汗)。 宜しければ、お勧め書籍など教えて頂けますと幸いです。 引き続き回答を募集します。 もっと簡易に、この処理を実装出来る方法があれば、お願いします。

gizmo5さんのコメント
あまり参考にはならないかもしれませんが、私が読んだのは、[https://developer.apple.com/jp/devcenter/ios/library/japanese.html:title=公式ドキュメント]と、この本です。 [asin:4873114179:detail] 他にもつまんだ程度ですけど何冊か読んだのですが、役に立たなくて記憶がありませんw 失礼かもしれませんが、あまりプログラミングの経験が無いように思います。 難しそうだとか余計なことは考えずに、動くコードをたくさん読んで実際に動かしてみる方が良いと思います。

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

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ