2016-04-09 1 views
-1

Ich versuche, den aktuellen Standort des Benutzers mit Swift zu ermitteln. Hier ist, was ich bin derzeit mit:Ermitteln des aktuellen Standorts des Benutzers, aber Rückkehr "Optional" California .. usw.

import UIKit 
import CoreLocation 

class ViewController: UIViewController, CLLocationManagerDelegate { 

    let locationManager = CLLocationManager(); 

    //Info about user 
    @IBOutlet weak var userTF: UITextField! 
    @IBOutlet weak var BarbCustTF: UITextField! 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view, typically from a nib. 

     self.locationManager.delegate = self; 
     self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
     self.locationManager.requestWhenInUseAuthorization(); 
     self.locationManager.startUpdatingLocation(); 

    } 

    override func didReceiveMemoryWarning() 
    { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 



    // GPS STUFF 
    // UPDATE LOCATION 
    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     CLGeocoder().reverseGeocodeLocation(manager.location!) { (placemarks, ErrorType) -> Void in 
      if(ErrorType != nil) 
      { 
       print("Error: " + ErrorType!.localizedDescription); 
       return; 
      } 

      if(placemarks?.count > 0) 
      { 
       let pm = placemarks![0] ; 
       self.displayLocationInfo(pm); 
      } 
     } 
    } 

    // STOP UPDATING LOCATION 
    func displayLocationInfo(placemark: CLPlacemark) 
    { 
     self.locationManager.stopUpdatingLocation(); 
     print(placemark.locality); 
     print(placemark.postalCode); 
     print(placemark.administrativeArea); 
     print(placemark.country); 
    } 

    // PRINT OUT ANY ERROR WITH LOCATION MANAGER 
    func locationManager(manager: CLLocationManager, didFailWithError error: NSError) { 
     print("Error: " + error.localizedDescription); 
    } 

Alles gut zu funktionieren scheint, aber die Ausgabe Ich ist immer wie wirklich seltsam und sagt Optional vor ihm, und ist auf jeden Fall (leider) nicht mein aktueller Standort .

Dies ist die Ausgabe erhalte ich, wenn ich es an die Konsole drucken

Optional ("Cupertino")

Optional ("95014")

Optional ("CA")

Optional ("Vereinigte Staaten")

Dinge, die ich habe versucht: 1) In meinem info.plist ich habe: NSLocationWhenInUseUsageDescription 2) Ich habe auch gehört, seltsame Dinge passiert, und ich versuchte, gehen Debug >> Lage >> und ändert es in der Stadt und alle möglichen Dinge (hat nicht geholfen)

Ich denke, dass das Problem etwas in meiner Funktion LocationManager ist, die mit wie "Verpackung" oder etwas zu tun hat? Ich bin mir nicht sicher, das ist mein erster Tag, an dem ich mit iOS-Programmierung mit Swift herumhantiert bin und ich weiß nicht wirklich, was das ist, aber ich glaube, das könnte das sein, was ich im Internet gesehen habe ... Im Grunde genommen versteh nicht, warum ich einige Standard-Apple-Standorte drucke (Kalifornien .. bla bla) Ich lebe nicht in Cali (leider).

+0

Das 'Optional (...)' ist, weil Sie ein 'Optional' drucken, das einen' String' einschließt. Sie müssen das optionale Element auspacken, um den zugrunde liegenden Typ mit 'if let' oder'! 'Zu erhalten. – paulvs

+0

Paul, wie mache ich das? –

+0

Laufen Sie das auf dem Simulator? Wenn ja, würde ich versuchen, Ihre App auf einem physischen Gerät auszuführen und zu überprüfen, ob Sie die richtige Ausgabe erhalten. – tfrank377

Antwort

0

Statt dieser

print(placemark.locality); 

tun, um diese

if let locality = placemark.locality { 
    print(locality) 
} 

Das if let Muster hier ist ein Weg, der nur locality-Druck, wenn es nicht nil ist. Dies ist der Weg, dies in diesem Fall zu tun.

Wenn Sie sicher waren, dass locality war nie nil, könnten Sie tun

print(placemark.locality!) 

aber wenn localitynil sein passiert ist, Ihre Anwendung auf dieser Linie abstürzen würde.

+0

Paul der Optional ist jetzt weg, aber warum druckt er Cupertiono? Warum weiß es nicht, dass ich in Virginia bin? –

+0

Es ist wie defaulting etwas anstelle der Lage, wo ich bin –

+1

Da Sie auf dem Simulator laufen, gibt es kein echtes GPS. Daher müssen Sie den Speicherort manuell festlegen (Debug> Speicherort> Benutzerdefinierter Speicherort). – paulvs

Verwandte Themen