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);
の
「オプション(...)」は、「文字列」を囲んでいる「オプション」を印刷しているためです。 'if let'や'! 'を使って基底型を取得するには、オプションをアンラップする必要があります。 – paulvs
ポール、どうすればいいですか? –
これはシミュレータで実行していますか?もしそうなら、私は物理的なデバイス上であなたのアプリを実行し、それがあなたに正しい出力を与えるかどうかを調べるでしょう。 – tfrank377