2

私は場所、通知、カメラなどのいくつかのアクセス許可をユーザーに求めているオンボーディングを設定しようとしています。私は3つの異なるView Controllerを設定しており、それぞれが権限の1つを求めて理由を説明しています。それぞれのビューコントローラには、一番下に「許可の許可」というボタンがあります。場所の許可が与えられた後にタスクを実行する方法ios

ユーザーがボタンをクリックすると、権限ダイアログがポップアップし、ユーザーが許可をクリックすると次のView Controllerに移行します。ここで

は、私が今持っているものです:

私は許可ダイアログがポップアップ非同期(async)使用して認証チェックがあるので、すぐにそれが閉じたときにタスクをキューにディスパッチを使用しますが、試した
class OnboardingStep2:UIViewController{ 

    override func viewDidLoad() { 
     self.view.backgroundColor = StyleKit.orangeWhite() 
    } 

    @IBAction func getPermission(sender: AnyObject) { 

     dispatch_sync(dispatch_get_main_queue()) { 
      let locManager = CLLocationManager() 
      locManager.requestAlwaysAuthorization() 

     } 

     if (CLLocationManager.authorizationStatus() == CLAuthorizationStatus.Authorized) { 
      self.performSegueWithIdentifier("goToStep3", sender: self) 
     } 

    } 
} 

走る(私は推測している)。 dispatch_syncを使用すると、ダイアログは表示されません。

これを実行する最善の方法は、最初にアクセス許可のダイアログをポップアップし、ユーザーが「segueを許可する」をクリックするとします。

答えて

3

この呼び出し次にCLLocationManagerDelegate

に準拠:私は目を含むように、コードを更新

スウィフト3.0

func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { 
    switch status { 
    case .notDetermined: 
     manager.requestLocation() 
    case .authorizedAlways, .authorizedWhenInUse: 
     // Do your thing here 
    default: 
     // Permission denied, do something else 
    } 
} 

スウィフト2.2

func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) { 
    switch status { 
    case .NotDetermined: 
     manager.requestLocation() 
    case .AuthorizedAlways, .AuthorizedWhenInUse: 
     // Do your thing here 
    default: 
     // Permission denied, do something else 
    } 
} 
+0

を私は許可を求めるプロンプトを表示するボタンをクリックするたびに、許可ダイアログがポップアップし、1秒以内に消えてから許可をクリックすることもできます。あなたはこれの原因を知っていますか? –

+0

さて、あなたのロケーションマネージャーオブジェクトはスコープから外れています(関数内にしか存在しないので、クリーンアップされます)。ロケーションマネージャをインスタンス変数に設定して、もう一度やり直してください。 – CodeBender

関連する問題