2017-02-01 5 views
0

Ist es möglich, didUpdateLocations innerhalb der Timer aufzurufen? Ich meine ..Timer auf Standort-Manager

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

Geht das zur Arbeit? Wenn ja, wird der Standort alle 10 Sekunden aktualisiert?

+0

Lassen Sie sich nicht Ort basierend auf Zeitintervall, da dies nicht die Wette Weg ist, es zu tun, und Sie werden wahrscheinlich eine Menge Batterie verbrauchen. Es ist am besten, die Bewegungen des Benutzers (wie Coremeotion Framework) zu beobachten, wie Gehen oder Fahren, und den Ort basierend auf einem Entfernungsfilter zu bestimmen, der alle 10 Meter oder mehr eingestellt wird. Wenn sich der Benutzer im stationären Status befindet, stellen Sie sicher, dass Sie die Standortaktualisierungen pausieren, oder stellen Sie die gewünschte Genauigkeit des Standortmanagers auf 3 Kilometer und den Entfernungsfilter auf einen höheren Wert ein. –

Antwort

1

Sie können didUpdateLocations nicht aufrufen. Wenn Sie häufiges Updates wollen, ist Ihre beste Wahl ist der Standard-Standortdienst:

Der Standard-Standort-Service ist am besten geeignet für Anwendungen, die ortsbezogenen Informationen direkt an die Benutzer liefern aber es kann durch andere Arten verwendet werden, von Apps auch. Um den Dienst zu starten, konfigurieren Sie die Eigenschaften successureAccuracy und distanceFilter des Standorts manager und rufen Sie dann requestLocation(), startUpdatingLocation(), oder allowDeferredLocationUpdates (bisTraveled: timeout :) -Methode auf. Niemals einen Genauigkeitswert angeben, der größer ist als das, was Sie benötigen. Core Location verwendet den von Ihnen angegebenen Genauigkeitswert, um die Leistung besser zu steuern. Ein höherer Genauigkeitsgrad erfordert präzisere Hardware wie GPS, die mehr Leistung verbraucht.

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

1

Ihr Rückruf-Selektor hat eine andere Signatur haben:

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. 
    } 
} 

(vielleicht einige Syntaxfehler enthalten, zur Zeit bei der Hand nicht Xcode haben)

+0

Ja, ich bekomme, dass es die Funktion aufrufen könnte, die Smith, aber genau das, was ich will, ist Benutzerstandort nach einer bestimmten Zeit – yerpy

+0

Sie können dies nicht tun. Sie könnten 'requestLocation' auf dem Standortmanager aufrufen, aber dies wird einen _async_-Aufruf an die Implementierung Ihrer Delegate' locationManager (_: didUpdateLocations:) auslösen. Es gibt keinen _synced_ Weg dazu –