2012-02-13 12 views
0

私はCLLocationManagerを利用してstartMonitoringSignificantLocationChanges()を使うクラス(myClass)にメソッド(myMethod)を持っています。 MyClassはCLLocationManagerのデリゲートであり、didUpdateToLocation()メソッドを実装しました。特定のメソッドが別のメソッド内で終了するのを待つ方法はありますか?

私がやりたいことは、myMethod内からstartMonitoringSignificantLocationChanges()を呼び出してからdidUpdateToLocation()が呼び出されて完了した後にmyMethodで作業を続けたいということです。これは可能ですか?

答えて

7

私はそれが不可能だとは言いませんが、私はあなたに、この方法の非同期性を受け入れ、あなたがしようとしていることをする別の方法を見つけることを強くお勧めします。 「before」と「after」の部分にmyMethodを分割し、デリゲートが「after」をトリガーさせるようにします。これはCocoa/iOSの本当に一般的なパターンであり、長期的に見るとフレームワークと戦わないほうが幸せです。

あなたの全体のUIをロックする場所の更新を待っている間、そのスレッドをブロックしているためmyMethodは、メインスレッドで実行されている何かである場合、これは特に真です。時間がかかり過ぎると、システムによってアプリが強制終了されます。

+0

私が今までに読んだ最も有用なアドバイス。私が長い間持っていた問題のために電球が点灯しました。 – trudyscousin

1

いいえ、そうではありませんが、その必要はありません。必要なデータを取得したら、didUpdateToLocationで機能を継続してください。

関連する問題