2012-07-26 6 views
6

私のアプリはCLLocationManagerのユーザーを追跡します。デリゲートコールdidUpdateToLocationで私は自分の位置を保存するすべての楽しいものを行う。しかし、私は彼らが停止したかどうかをテストする方法が必要でした。離れて私は場所を録音を停止し、彼らの旅を考えることができます。だからが呼び出されるたびに追加されたり削除されたりするNSTimerCCLocationManagerにあります。それは離れて、ユーザーが停止し、CLLocationManagerが呼び出されるのを止めるときに開始されます。NSTimerとNSRunLoop

私が今まで仕事にNSTimerを得ることができる唯一の方法は行うことです。

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

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

[userStoppedMovingTimer invalidate]; 

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

+0

'+ scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:'でタイマーを作成した場合、これは問題ではありません。 –

答えて

8

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

  1. は、タイマーを作成し、現在の実行時にそれをスケジュールするscheduledTimerWithTimeInterval:invocation:repeats:または scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:クラス メソッドを使用しますループの のデフォルトモード。

  2. は、実行ループでそれをスケジュールすることなく、タイマーオブジェクトを作成するためにtimerWithTimeInterval:invocation:repeats:または timerWithTimeInterval:target:selector:userInfo:repeats:クラスメソッド を使用してください。 ( がそれを作成した後、手動で対応するNSRunLoopオブジェクトのaddTimer:forMode:方法 を呼び出すことによって実行ループにタイマーを追加する必要があります。)

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

あなたはおそらく以前にオプション1を使用して、今、あなたましたオプション2または3を使用しています。