- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:NSThread中にテキストフィールドが更新しない)
NSThread中にテキストフィールドが更新しない理由と解決策を教えてください
このQ&Aのポイント
- NSThread中にテキストフィールドが更新しない理由を教えてください
- スレッドの起動と停止を行うプログラムを作成しましたが、テキストフィールドが更新されません
- テキストフィールドの更新が正常に行われないため、原因と解決策を教えてください
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
スレッドを停止すると、テキストフィールドには、iCntの最終値が入力されますね?ならば、プログラムは正常に動作していると判断できるでしょう。 ためしにマルチスレッドもなにもしない、純粋、単純に、テキストフィールドに文字列を繰り返し処理で入力するプログラムを書いて、実行してみてください。 - (void)inputText { int i; for (i = 0; i < 100; i++) { textField.text = [NSString stringWithFormat: @"%d", i]; } } ただ「99」が入力されるだけで、途中漸増する「i」の値が入力されることはないでしょう。 iOS、ないしUIKitフレームワークが、そういう仕様だと考えていいと思います。 マルチスレッドが意図どおりに動いているか、検証したいのでしたら、ほかの方法を試すしかないでしょう。(私に、名案はありません) テキストフィールドの値を、つぎつぎに変化させていきたいのなら、NSTimerを使いましょう。 ともかく、あなたが提示なさったプログラムに、(おそらく)問題はどこにもなく、正常に動作していると、結論づけていいでしょう。問題がどこにもないのですから、とうぜんなにも対処しなければならない箇所もありません。
お礼
ご回答頂きありがとうございます。 おっしゃる通りinputText の構文を実行してもテキストフィールドに反映されるのはメソッドを抜けてからでした。 「ボタンが押された」等のイベント処理時はこのような現象は納得できるのですが、Mac-ObjectiveCではスレッドを起こしてもテキストオブジェクト等のリアルタイムな書き換えができないのですね。Windows-VCで組む時はスレッドから普通にテキストオブジェクトを書き換えているのでちょっとしたカルチャーショックです。 教えて頂いた通りNSTimerを使用した所テキストフィールドのリアルタイムは表示が出来ました。 問題は解決です助かりました。 // NSTimer *tmr; //タイマー .hで定義 // int iCnt .hで定義 // txt06_01 テキストフィールド /////////////////////////////////// // タイマーの開始 -(void)StartTmr{ if( tmr == nil ){ tmr = [NSTimer scheduledTimerWithTimeInterval:0 // インターバル target:self // メソッドのある場所 selector:@selector(TmrMes:) // メソッドの指定 userInfo:nil // メソッドに渡す情報 repeats:YES]; // 繰り返し実行 } } /////////////////////////////////// // タイマーの停止 -(void)StopTmr{ [tmr invalidate]; //タイマー停止 tmr = nil; } /////////////////////////////////// // タイマーメソッド -(void)TmrMes:(NSTimer*)timer{ NSLog(@"data:%i",iCnt); txt06_01.text = [NSString stringWithFormat:@"%i",iCnt]; // iCnt++; }