2017-02-09 16 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 

сам выход правильно, но он выплевывает несколько отпечатков на одном дыхании. И я не хочу, чтобы код запускался несколько раз, только один раз за интервал.

Заранее спасибо.

ответ

0

Вы не должны вызывать locationManager.stopUpdatingLocation() после получения местоположения, и вам не нужен таймер. Просто вызовите locationManager.startUpdatingLocation() один раз в начале и он будет автоматически отправлять вам обновления, но только при изменении местоположения. См. Документацию по адресу https://developer.apple.com/reference/corelocation/cllocationmanager

+0

Но разве это не плохо, если вы продолжаете ее обновлять? Или это хорошо, чтобы позволить этому сделать это? –

+0

Предполагается, что Apple будет работать так же, что лучше контролировать, когда он отправляет вам обновления, чем пытаться управлять им вручную. Если вам не нужны обновления в течение длительного времени, выключите его. – simonWasHere

+0

Если это так, как это должно быть сделано плохо, пусть это так, то спасибо :) –