2

私が直面している問題は、UIButtonを押すと、アクションを開始するためのロケーションサービスが必要になることです。しかし、ユーザーがアプリの最初の起動時に位置情報サービスを拒否した場合、アプリはクラッシュします。クラッシュすることなく拒否された後でロケーションサービスを許可するように求めるメッセージ

私はCLAuthorizationStatus.Deniedを実装する方法を見つけようとしましたが、そうする方法が見つからないようです。私が実装できるように見える唯一のコードは、アプリケーションの最初の起動時に要求を開始するdidChangeAuthorizationStatusです。

func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) 
{ 
    if status == .AuthorizedAlways || status == .AuthorizedWhenInUse 
    { 
     manager.startUpdatingLocation() 
    } 
    else 
    { 
     manager.requestWhenInUseAuthorization() 
    } 
} 

私は、ロケーションサービスが拒否された場合、アプリケーションがクラッシュするAPIリクエストを送信するためにUIButtonを押した場合。

私の質問は、ボタンのIBAction内で、ユーザーが設定に行き、ロケーションサービスを有効にするように指示するメソッドを実装する方法です。 :)

+0

何の問題あなたは正確に解決しようとしていますか? – nhgrif

+0

ロケーションサービスを使用する権限が拒否され、ボタンが押された場合 - >現在のアラートでアプリケーションを使用する必要があることを示すアラートが表示され、ユーザーは設定を変更するための設定にリダイレクトされます。 – lifewithelliott

+0

そして 'else = status .=Denied'を試したときに何が起こったのですか? – nhgrif

答えて

5

CLLocationManagerにはCLLocationManagerオブジェクトを初期化せずに現在の承認ステータスを取得するために使用できる静的関数authorizationStatus()があります。ユーザーはあなたが承認状態を確認し、それに従って行動することができ、ボタンを押したときに呼び出す関数内ので

import UIKit 
import CoreLocation 

class ViewController: UIViewController, CLLocationManagerDelegate { 

    lazy var locationManager = CLLocationManager() 

    ... 

    func didPressButton(sender: UIButton) { 
     switch CLLocationManager.authorizationStatus() { 
     case .AuthorizedAlways, .AuthorizedWhenInUse: 
      locationManager.delegate = self 
      locationManager.startUpdatingLocation() 
     case .NotDetermined: 
      locationManager.delegate = self 
      locationManager.requestWhenInUseAuthorization() 
     case .Denied: 
      print("Show Alert with link to settings") 
     case .Restricted: 
      // Nothing you can do, app cannot use location services 
      break 
     } 
    } 

    func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) { 
     if status == .AuthorizedWhenInUse { 
      manager.startUpdatingLocation() 
     } 
    } 
} 
+0

Fantastic!私はそれを高く評価します。 :) – lifewithelliott

関連する問題