/ / Swift 2.0でユーザーの現在地を取得するのに問題があります-迅速、座標、コアロケーション

私はSwift 2.0でユーザの現在地を受け取るのが難しいです - 迅速、座標、コア - ロケーション

私は取得する方法のためにウェブをサーフィンしてきましたSwift 2.0でのユーザーの現在の場所、残念ながら何も機能していません。これが私が取り組んでいるコードですが、機能しません。info.plistファイルで遊んでいますが、何を追加すればよいかわかりません。誰かが私が間違っていることを教えてもらえますか?

import CoreLocation

class ViewController: UIViewController {

let locationManager = CLLocationManager()

override func viewDidLoad(){
super.viewDidLoad()
findMyLocation()
}



func findMyLocation() {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
locationManager.requestWhenInUseAuthorization()

locationManager.startUpdatingLocation()
}

}

extension ViewController: CLLocationManagerDelegate {

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

for location in locations {
print("THIS IS THE LATTITUDE (location.coordinate.latitude)")
}


locationManager.stopUpdatingLocation()
}
}

回答:

回答№1は0

編集:あなたの中で didUpdateLocations 機能は強制しない stopUpdatingLocation。この関数は、現在地が確定して地図に表示される前に、複数回呼び出されます。その行を削除すると、コンソールが緯度と経度で3〜5回印刷されることがわかります。

ユーザーの場所を取得するための推奨される方法は、アクセス許可があることを常に確認することです。そうしない場合は、ユーザーに警告して、そのアクセス許可を求めることができます。

あなたのviewDidLoad()で

locationManager?.requestAlwaysAuthorization()

// .AuthorizedInUse or .AuthorizedAlways depending on your app
if CLLocationManager.authorizationStatus() == .AuthorizedInUse {
locationManager?.distanceFilter = 5.0
locationManager?.requestLocation()
}

これにより、承認がない場合は承認を要求し、承認が拒否されたかどうかを確認できます。さらに、この機能を CLLocationManagerDelegate

func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus)
{
//Again this can be .AuthorizedAlways or .AuthorizedInUse depending
if status == .AuthorizedAlways {
locationManager?.startUpdatingLocation()
// ...
}
}

これにより、位置情報サービスの使用後に位置情報のアクセス許可が変更された場合でも、アプリは適切に応答できます。 viewDidLoad().

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location = locations.last
centerLocation = location

let center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude)
let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.02, longitudeDelta: 0.02))
userLocationRegion = region
mainMapView.showAnnotations(mainMapView.annotations, animated: true)

self.mainMapView.setRegion(region, animated: true)
}

回答№2の場合は0

NSLocationWhenInUseUsageDescriptionを追加する必要があります。または、NSLocationAlwaysUsageDescriptionはユースケースによって異なります。