web-dev-qa-db-ja.com

ロケーション許可のチェックと承認

プログラムでユーザーの位置を地図に表示したい。最初は動作していたがランダムに停止したので、以下のコードを追加して修正しようとしたが、問題が発生した。前もって感謝します!

    override func viewDidLoad()
    {
        super.viewDidLoad()
        self.locationManager.delegate = self
        self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
        if CLLocationManager.locationServicesEnabled()
        {

            let status: CLAuthorizationStatus = CLLocationManager.authorizationStatus()
            if status == CLAuthorizationStatus.NotDetermined
            {
                locationManager.requestAlwaysAuthorization()
            }
            } else {

                print("locationServices disenabled")
            }
            locationManager.startUpdatingLocation()
            self.locationManager.startUpdatingLocation()
            self.mapView.showsUserLocation = true
            mapView.delegate = self
            centerMapOnLocation(initialLocation)
            addBoundry()
    }
8
Steve

あなたは電話する必要がありました、

locationManager.requestAlwaysAuthorization() 

同様に

 locationManager.requestWhenInUseAuthorization()

フォアグラウンドでも位置をスムーズに使用するために!

startupdatinglocationを呼び出すために2つのインスタンスは必要ありません。 1つ保持します。スコープ全体の場所を取得するには、ローカルではなくインスタンス変数またはグローバル変数を使用する必要があります。

更新:

info.plistのように、NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescriptionの2つのキーを使用法の説明とともに設定する必要があります。

14
Lion

Info.plistのNSLocationAlwaysUsageDescriptionおよびNSLocationWhenInUseUsageDescriptionsetを使用しても、同じ問題が発生していました。デバッガーはNSLocationAlwaysAndWhenInUseUsageDescription...も設定するように指示したので、設定しました。動いた!

4
Chris Ashton

「WhenInUse」通知が必要な場合は、info.plistに「Privacy-Location When In Use Usage Description」のみを追加する必要がありますが、「Always」アクセスが必要な場合、info.plistは次のinfo.plistスクリーンショットのようになります。

Image

RequestAlwaysAuthorizationやrequestWhenInUseAuthorizationのようなリクエスト認証を追加する必要はありません

1
Blue1905