同じコードです。私はstartUpdatingLocation()を一度だけ呼び出してstopUpdatingLocations()を実行しても、この場合locationManager didUpdateLocationsは、デバイス上で2回、シミュレータで1回だけ発生します。
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
manager.stopUpdatingLocation()
let loc: CLLocation = locations[locations.count - 1]
let id = 0
let type = 0
let number = 0
createNewDataPoint(id, loc: loc, type: type, number: number)
}
didUpdateLocationsの内側に、createNewDataPointは、2つの新しいデータポイントを作成し、二回呼び出されます。それはシミュレータで一度しか起こらないので、シミュレータがその位置を偽装するので、実際のデバイスとGPSと何か関係があると仮定しています。
startUpdatingLocation()は、コード上でボタン上に1回だけ表示されます。基本的には、ボタンをクリックし、manager.startUpdatingLocations()に移動し、didUpdateLocationsがシミュレータで一度ヒットし、デバイス上で2回(同一の座標)、2つの新しいデータポイントが作成されます。
他のコードは、精度、フィルタ、承認リクエスト、前述のstartUpdatingLocation()の設定だけです。必要な倍のデータポイントを作成していないことを確認するためにできることはありますか?
細かい作業(あなたはあなたの条件として変更することができます)200メートルをされているように、私はあなたが1 'didUpdateLocations'を得ればそれをオン、フラグを作成することができると思います。私は問題は、 'CLLocationManager'が非常に速く更新され、' stopUpdatingLocation'が完了するまでに時間がかかることです。 – anhtu
以前のバージョンで提案されているテクニックの1つを使用する必要がありますが、ios9をチェックし、その場合は 'requestLocation'を使用することをお勧めします。 – Paulw11