6

私のアプリはでユーザーを追跡しますCLLocationManager。デリゲートコールdidUpdateToLocationでは、私は彼らの立場を保存するという楽しいことをすべて行います。しかし、私は彼らが止まったかどうかをテストする方法が必要でした。それで、私は場所の記録をやめて、彼らの旅行を検討することができました。だから私は、が呼び出されるたびに追加および削除されるNSTimerinを持っています。それは、ユーザーが停止して呼び出しを停止したときに開始されます。CCLocationManagerdidUpdateToLocationCLLocationManager

私がこれまでに機能させることができる唯一の方法は、次のことNSTimerを行うことです。

[[NSRunLoop mainRunLoop] addTimer:userStoppedMovingTimer forMode:NSRunLoopCommonModes];

次にそれを削除するには:

[userStoppedMovingTimer invalidate];

私は過去にこのようなタイマーを追加する必要はありませんでした。誰かがこれがなぜであるかについていくつかの光を当てることができますか?

4

1 に答える 1

9

ドキュメントから:

タイマーを作成するには、次の3つの方法があります。

  1. scheduledTimerWithTimeInterval:invocation:repeats:or classメソッドを使用scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:してタイマーを作成し、デフォルトモードの現在の実行ループでタイマーをスケジュールします。

  2. timerWithTimeInterval:invocation:repeats:or classメソッドを使用timerWithTimeInterval:target:selector:userInfo:repeats:して、実行ループでスケジュールせずにタイマーオブジェクトを作成します。addTimer:forMode:(作成後、対応するNSRunLoopオブジェクトのメソッドを呼び出して、タイマーを手動で実行ループに追加する必要があります。)

  3. タイマーを割り当て、 initWithFireDate:interval:target:selector:userInfo:repeats:メソッドを使用して初期化します。addTimer:forMode:(作成後、対応するオブジェクトのメソッドを呼び出して、タイマーを実行ループに手動で追加する必要がありNSRunLoop ます。)

以前はオプション1を使用していた可能性がありますが、現在はオプション2または3を使用しています。

于 2012-07-26T04:08:55.470 に答える