2013-07-25 10 views
6

私は地域監視の仕組みを混乱させるかもしれませんが、これは私が今までに持っているものです:iOSは、アプリが実行されていないときに、地域監視でどのロケーションマネージャーがデリゲートを呼び出すのを知っていますか?

シングルトンクラスで実装されている私のロケーションマネージャで監視する地域を登録しています。実装されたメソッドが呼び出されるように、ロケーションマネージャの代理人。

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region 

これは、アプリケーションがアクティブまたはサスペンドされている場合は、メソッドが呼び出されている場合は、これはまったく同じように機能します。クラスが既にロードされているため、地域がイベントを入力すると、iOSはこれを私のアプリにも送信します。登録したロケーションマネージャを呼び出すと(おそらくそれを参照しています)、代わって、それに沿って登録されています(クラスは準備ができて読み込まれているので)。

問題は、アプリが強制終了されたらどうなりますか?それは最初に背景に打ち込まれたのですか? iOSはどのデリゲートメソッドを呼び出すのか、そして既にロードされているのかどうかを知っていますか?

答えて

7

アプリが強制終了され、位置情報の更新が開始されると、ロケーションマネージャのデリゲートがまだ存在しないため、そのデリゲートに通知が配信されません。システムは、どのクラスをロケーションマネージャのデリゲートとして使用するか、またはインスタンス化する方法を知ることはできません。

代わりにapplication:didFinishLaunchingWithOptions:が呼び出されますが、UIApplicationLaunchOptionsLocationKeyがオプション辞書に設定されています。それはあなたのアプリケーションに、あなたがロケーションマネージャをインスタンス化し、デリゲートを設定する必要があることを伝えます。これを行った後でなければ、デリゲートはリージョンの更新で呼び出されます。

+0

右には2つの異なるフローがありますか? 1は私のアプリを生きていて、もう1つはそれなしです。ちなみに、アプリ起動時にそのキーで辞書を受け取った後は、その特定の通知を処理する必要がありますか?または私が瞬時に配信されるように設定したときに監視されているロケーションマネージャですか? (Imは私のアプリを起動させた通知について話しています) – Pochi

+0

それは正しいです。ほとんどの場合、起動オプションとして与えられた場所の値をあなたのアプリケーションの場所の変更を処理するものに渡し、アプリケーションの場所の変更を監視する可能性があります。あなたは新しい場所から出発しました。その場所の値で何かを行い、場所の変更を監視し始めました。 – quellish

関連する問題