2016-04-09 8 views
-1

Swiftを使用してユーザーの現在地を取得しようとしています。私の現在の場所はユーザーの現在地を取得していますが、「任意」のカリフォルニアなどを取得しています。

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); 
    } 

すべてが正常に動作するようですが、私は取得しています出力は、本当に奇妙なのようなもので、その前にオプション言うと、(残念ながら)間違いではありません。ここに私が現在使用しているものです。

この私がコンソールにそれを印刷するとき、私は

を取得しています出力されるオプション( "クパチーノ")

はオプション( "95014")

オプション( "CA")

オプション( "米国")

物事私が試した: 1)私のInfo.plistでは私が持っている:NSLocationWhenInUseUsageDescription私も聞いた 2)奇妙なものが起こると私はデバッグ>>場所>>に行くし、それを変更してみました都市やあらゆる種類のもの(助けにならなかった)

私の問題は、私の機能のなかにあると思いますLocationManager "ラッピング"のようなものですか?私は確信していない、これは私の最初の日スウィフトとiOSのプログラミングを乱していると私は本当にラッピングが何であるかわからないが、私はインターネット上で見たものから起こっているかもしれないと思う...基本的に私はなぜ私はいくつかのデフォルトのリンゴの場所を印刷しているのか理解していません。(残念なことに)Caliには住んでいません。代わりに、この

print(placemark.locality); 

+0

「オプション(...)」は、「文字列」を囲んでいる「オプション」を印刷しているためです。 'if let'や'! 'を使って基底型を取得するには、オプションをアンラップする必要があります。 – paulvs

+0

ポール、どうすればいいですか? –

+0

これはシミュレータで実行していますか?もしそうなら、私は物理的なデバイス上であなたのアプリを実行し、それがあなたに正しい出力を与えるかどうかを調べるでしょう。 – tfrank377

答えて

0

は、ここでは、この

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

if letパターンを行うことがnilがない場合にのみlocalityを印刷する方法があります。この場合、これを行う方法です。

あなたはlocalitynilなかったことを確信していた場合は、

print(placemark.locality!) 

を行うことができますがlocalitynilであることを起こった場合、あなたのアプリケーションはその行にクラッシュしていました。

+0

ポールオプションはもうなくなりましたが、なぜそれがクパチーノを印刷していますか?なぜ私はバージニアにいるのか分からないのですか? –

+0

これは私がいる場所を得るのではなく、何かをデフォルト設定するのと同じです –

+1

あなたのシミュレータでの実行以来、実際のGPSはありません。したがって、手動で場所を設定する必要があります([デバッグ]> [場所]> [カスタム場所])。 – paulvs

関連する問題