2017-02-01 12 views
0

Timerの内部でdidUpdateLocationsを呼び出すことはできますか?私は..ロケーションマネージャのタイマー

_timer = Timer.scheduledTimer(timeInterval: 10, target: self, selector: #selector(_:didUpdateLocations:)), userInfo: nil, repeats: true) 

これはうまくいくのでしょうか?はいの場合、10秒ごとに場所が更新されますか?

+0

取得しないでくださいこれは賭けの方法ではないので、時間間隔に基づいた場所は、おそらく多くのバッテリーを消費することになります。歩行や運転のようなユーザーの動き(コアモーションフレームワークを使用する)を監視し、10メートル以上に設定された距離フィルターに基づいて位置を取得することが最善です。ユーザーが静止している場合は、位置情報の更新を一時停止するか、位置情報管理者の希望する精度を3キロメートルに設定し、距離フィルタを高い値に設定してください。 –

答えて

1

didUpdateLocationsを呼び出すことはできません。あなたが頻繁に更新をしたい場合は、あなたの最良の選択は、標準位置情報サービスである:

標準位置情報サービスは、ユーザーに直接位置関連情報をお届け が、それは 他の種類によって使用されるアプリケーションのための最も適切ですのアプリも。サービスを開始するには、位置 のdesiredAccuracyプロパティとdistanceFilterプロパティを に設定し、requestLocation()、startUpdatingLocation()、 またはallowDeferredLocationUpdates(untilTraveled:timeout :)メソッドを呼び出します。決して の精度値を必要以上に指定しないでください。コアの位置 は、指定した精度の値を使用して、より良い電力を管理します。 の精度が高いほど、より正確なGPSのようなハードウェアが必要になります。 は、より多くの電力を消費します。

https://developer.apple.com/reference/corelocation/cllocationmanager

1

あなたのコールバックセレクタは異なる署名を持っています

class MyClass { 

    func startTimer() { 
     _timer = Timer.scheduledTimer(timeInterval: 10, target: self, selector: #selector(MyClass.timerCallBack(_:)), userInfo: nil, repeats: true) 
    } 

    // ... 

    func timerCallBack(timer: Timer) { 
     // Here you go. 
    } 
} 

(たぶん、いくつかの構文エラーが含まれています。現在手元にXcodeのを持っていない)

+0

ええ、それはsmithを行う機能を呼び出すかもしれませんが、正確に私が望むのは一定期間後にユーザーの場所です – yerpy

+0

これはできません。 location managerで 'requestLocation'を呼び出すこともできますが、これはデリゲートの' locationManager(_:didUpdateLocations:) '実装への_async_呼び出しをトリガーします。そうする_synced_方法はありません –

関連する問題