Frage

Ich frage mich, ob es eine Möglichkeit ist, es zu machen, so CLLocationManager nicht automatisch eine im Cache gespeicherte Position zurück. Ich verstehe, dass die Dokumente sagen: „Die Lage Service so schnell wie möglich eine Anfangsposition zurückkehrt, im Cache gespeicherten Informationen zurückkehrte, wenn verfügbar“, aber diese im Cache gespeicherten Lage könnte extrem weit weg von dem aktuellen Standort des Benutzers, und ich möchte es genauer, wenn möglich.

Vielen Dank für jede Hilfe!

War es hilfreich?

Lösung

Sie können nicht von Caching stoppen, aber es ist nicht schwer, im Cache gespeicherten Daten auszufiltern. Core Location enthält einen Zeitstempel mit ihren Standorten. Vergleichen Sie die Zeitstempel der Lage mit einem Zeitstempel gespeichert, wenn die App gestartet wird, und Sie werden in der Lage sein zu sagen, welche Orte alt sind (im Cache gespeichert, gefunden, bevor die App angegeben) und die sind neu. Werfen Sie die alte weg.

Die Lage Zeitstempel ist ein NSDate, also nur den Wert von [NSDate date] erhalten, wenn Ihre Anwendung gestartet und verwendet, die als Referenzpunkt, wenn Standorte filtern. Man könnte sogar den Referenzwert wegzuwerfen, sobald Sie beginnen, neue Daten zu erhalten und einen Null Stichtag zu behandeln, als was bedeutet, dass neue Standorte vertraut werden sollte.

Andere Tipps

-(void)locationManager:(CLLocationManager*)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation *)oldLocation 
{
    if ([newLocation.timestamp timeIntervalSinceNow] > -10.0) // The value is not older than 10 sec. 
    { 
         // do something 
    } 
 }

Sie können diese Eigenschaft CLLocationManager verwenden:

@property(readonly, NS_NONATOMIC_IPHONEONLY) CLLocation *location;

Der Wert dieser Eigenschaft ist nil wenn keine Standortdaten jemals abgerufen worden ist, andernfalls ist dieses ist, wo seine Daten Corelocation-Caches. Wenn Sie also immer von Grund auf neu starten wollen, überprüfen Sie einfach, wenn diese Eigenschaft nil ist oder nicht. Wenn es nil ist, dann sind Sie in Ordnung; Andernfalls müssen Sie Ihren Standort-Manager stoppen und erneut starten: das Update zwingen wird, die durch die frische in der zwischengespeicherte Wert wird überschrieben führen Sie nur ausgelöst haben

.

Siehe meine Antwort hier: Wie Cache von CLLocation entfernen?  über „wie Cache von CLLocation zu entfernen“. Dies sollte Ihr Problem in Bezug auf den Cache des CLLocationManager lösen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top