- 締切済み
Xcodeでマルチスレッドでなく順処理する方法
こんにちは。 今Xcode4.2.1を使っております。 さて、今処理としてあるアプリ連携を行う処理を作っているのですが、 マルチスレッドでなく 「処理A」→「処理B」→「処理C」 と順に処理をしたいのですが、スレッド化してうまくいきません。 具体的には [self presentModalViewController: controller animated: YES];(処理A) [処理B] [処理C] : と書いた時に、処理Aがスレッドとして動くので、 処理Aが終了しないうちにB、Cがスタートしてしまいます。 1)順に処理をさせたい(マルチスレッド化しない方法)のですが、 どうやったらよいのでしょうか? もしくは 2)Aの処理がおわるまで監視&制御する(排他制御)方法はあるのでしょうか? 素人質問で申し訳ありません。 些細なことでも結構ですので 宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
マルチスレッド化が……というのが意味がよくわからなかったのですが、presentModalViewControllerで呼び出したダイアログを閉じてから次の処理を行うようにしたい、ということなんでしょうか。 だとすると、そもそもpresentModalViewControllerの後に処理を続けて書いたのが失敗です。モーダルに表示といっても、そこで処理が停止して待ってくれるわけではありません。これはマルチスレッドとかいった問題ではありません。単に「presentModalViewControllerで処理は停止しない」というだけのことです。 どうするかというと、表示するビューに閉じるボタンなどを用意して、続きはそのボタンをクリックしたら行わせるようにするのが一般的です。つまり、こうです。 -(void) モーダルで表示させるメソッド :(id)sender { [self presentModalViewController: controller animated: YES];(処理A) } -(void)モーダル表示のボタンクリックで呼び出すメソッド :(id)sender { [処理B] [処理C] : }
- xjd
- ベストアンサー率63% (1021/1612)
通知(たとえば通信の終了)を受け取ってから処理を始める、などはネットワークプログラミング では基本ですね。 Cocoa/iOSなら、たとえば ・NSNotificationクラス ・キー値監視 Key Value Observing (KVO) ・処理Aのクラスに処理完了のデリゲートメソッドを実装する など通知を受け取ってから実行する仕組みがいろいろありますので 調べてみてください。