2017-02-09 4 views
0

こんにちは私はlocationManager.startUpdatingLocationすべての私のロジックを処理する関数を呼び出し、問題は複数回呼び出されているように見えますが、なぜそれが分かりませんか?私はswift 3で設定された間隔で場所の更新を取得しようとしていますが、毎回の間隔で多くの機能を実行するので、一度だけ実行する必要があります

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    let locValue:CLLocationCoordinate2D = manager.location!.coordinate 
    print("locations = \(locValue.latitude) \(locValue.longitude)") 

    long = locValue.longitude 
    lat = locValue.latitude 



    if(self.arrayOfCellData.count > 0) 
    { 

    for i in 0...self.arrayOfCellData.count-1 
    { 


     getdistance(lat0: self.arrayOfCellData[i].shop.latitude!, long0: self.arrayOfCellData[i].shop.longitude!, lat1: locValue.latitude, long1: locValue.longitude) 
     {distance in 

      self.arrayOfCellData[i].meterstolocation = distance 

     } 

    } 
     DispatchQueue.main.async { 
      self.myTable.reloadData() 

     } 
    } 
    print("stopped updating") 
    locationManager.stopUpdatingLocation() 
} 

var run: Bool = true; 

func updateLocations() 
{ 
if(run) 
    { 
    run = false; 
    } 
    else 
{ 

     locationManager.startUpdatingLocation() 
    } 

} 





override func viewDidLoad() { 
    super.viewDidLoad() 
// 


    locationManager.requestAlwaysAuthorization() 
    // 
    // 
    // 
    if CLLocationManager.locationServicesEnabled() { 
    locationManager.delegate = self 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    locationManager.pausesLocationUpdatesAutomatically = false 
    locationManager.startUpdatingLocation() 


     Timer.scheduledTimer(timeInterval: 10, 
          target: self, 
          selector: #selector(self.updateLocations), 
          userInfo: nil, 
          repeats: true) 

    } 

私の出力は次のとおりです。

locations = 37.33228724 -122.05833354 
stopped updating 
locations = 37.33228724 -122.05833354 
stopped updating 
locations = 37.33228724 -122.05833354 
stopped updating 
locations = 37.33228724 -122.05833354 
stopped updating 
locations = 37.33228724 -122.05833354 

出力自体は正しいですが、それは一度に複数のプリントを出してくれる。そして、コードを複数回実行する必要はなく、間隔ごとに1回だけ実行する必要があります。

ありがとうございます。

答えて

0

場所を取得した後にlocationManager.stopUpdatingLocation()を呼び出さず、タイマーを必要としません。開始時にlocationManager.startUpdatingLocation()を一度呼び出すと、場所が変更されたときにのみ自動的に更新が送信され続けます。 https://developer.apple.com/reference/corelocation/cllocationmanager

+0

しかし、それを更新し続けるのは悪いことではありませんか?それともそうするのはいいですか? –

+0

これはAppleのように動作するように意図されています。手動で試して制御するよりも、アップデートを送信するときに制御するほうがはるかに優れています。長い間更新が必要ない場合は、スイッチをオフにしてください。 – simonWasHere

+0

それはそれが悪いやり方にされている方法があればそれはそのようになりましょうありがとう:) –

関連する問題