質問: 現在アプリを開発しており、APIに現在位置情報(緯度、経度)と現在時間をURLのパラメータとして渡す処理を行いたいのですが、処理がうまくいきません。 A:現在位置を取得するクラス B:現在時間を取得するクラス C:APIからデータを取得するクラス 以上3つ(A,B,C)のクラスをViewControllr内でインスタンス化しviewDidload()内にA,B,Cの順に呼び出したいのですが、どうもデバックを見る限りB,C,Aの順に処理が行われているため現在位置情報をパラメータとして渡せていないのでAPIからデータを得ることができません。 A,B,Cの順で処理を行う良い方法はないでしょうか? 教えていただけると幸いです。
回答: ということは、Aの処理が非同期であるのだが、同期処理したい。ということのようですが、非同期処理のAppleの手続きを使っているかぎり、viewDidLoadのなかで、A B Cの完了を待つような事をするのは、禁忌です。というのは、メインスレッド(UI)の処理をブロックしているから。 Aを始めることは、viewDidLoadの中でも出来ますが。 その為、Aの処理の完了を待つためには、NSNotificationをつかうか、completion handlerを使うなどして、Aの完了後に、viewDidLoadではないところで。B,Cを呼ぶようにしないといけないです。