Frage

Ich versuche zu lernen, wie die CLLocation Klasse für den Zweck zu verwenden, für den Aufbau einer iPhone-App, die der Nutzer als aktuelle Position nimmt, und dann verwendet es ergibt sich aus einer SQLite-Datenbank abzurufen. Um dies zu tun, muss ich zunächst den aktuellen Standort des Benutzers erwerben, indem die CLLocation-Klasse und insbesondere die Methode:

(void)locationManager: (CLLocationManager *)manager didUpdateToLocation: (CLLocation *)newLocation fromLocation: (CLLocation *)oldLocation {}

Derzeit ich bin in der Lage der Koordinaten in einer Beispielanwendung angezeigt zu bekommen, dass ich erfolgreich im Einsatz. Allerdings habe ich versucht, es zu ändern, etwas so, dass ich nur ein Update erhalten (das ist, was ich will, nicht mehrere), und die Ausgabe an die NSLog Konsole zu drucken. Mein entsprechenden Code sieht wie folgt aus:

- (void) locationManager:(CLLocationManager *)manager 
 didUpdateToLocation:(CLLocation *)newLocation
        fromLocation:(CLLocation *)oldLocation {

numUpdates++;

NSString *lat = [[NSString alloc] initWithFormat:@"%g", newLocation.coordinate.latitude];
latitudeTextField.text = lat;

NSString *lng = [[NSString alloc] initWithFormat:@"%g", newLocation.coordinate.longitude];
longitudeTextField.text = lng;

NSString *acc = [[NSString alloc] initWithFormat:@"%g", newLocation.horizontalAccuracy];
accuracyTextField.text = acc;

if (numUpdates == 1) {

    [lm stopUpdatingLocation];
    NSLog(@"latitude: %i longitude: %i", lat, lng);

}

Doch anstatt die Koordinaten des Erhaltens in der Konsole (dh 37,3317 für Breite und -122,031 für Längengrad) erscheinen, ich die folgende Ausgabe, die leider anders ist jedes Mal, wenn ich meinen Code ausführen:

[Session started at 2010-11-03 01:43:36 -0400.]
2010-11-03 01:43:41.208 GPS[4702:207] latitude: 65138096 longitude: 65023248
Terminating in response to SpringBoard's termination.

[Session started at 2010-11-03 21:38:45 -0400.]
2010-11-03 21:39:37.072 GPS[5880:207] latitude: 65030208 longitude: 65070336
Terminating in response to SpringBoard's termination.

[Session started at 2010-11-03 21:53:12 -0400.]
2010-11-03 21:53:21.824 GPS[5899:207] latitude: 65042624 longitude: 65086352

sehen kann jemand, was ich falsch mache, und mir zeigen, wie richtig den Wert des Benutzers Breite zuzuweisen und Längenposition auf eine Variable, und dann Druck auf die NSLog Konsole in seiner Dezimalformat und NOT im Grad-Format?

War es hilfreich?

Lösung

%i ist für int-Werte zu drucken. In Ihrem Code, lat und lng ist NSStrings (Objekte), so Verwendung %@:

NSLog(@"latitude: %@ longitude: %@", lat, lng);

Siehe String Formatbezeichner .

Andere Tipps

Die Lage ist anders, weil die GPS-Daten nicht korrekt sind. Wenn Sie genau genug Daten benötigen, ignorieren 3-4 ersten Stellen durch Filterung auf Basis von newLocation.horizontalAccuracy.

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