2

위치, 알림 및 카메라와 같은 몇 가지 권한을 사용자에게 묻는 보딩을 설정하려고합니다. 세 가지 다른보기 컨트롤러 설정, 각 권한 중 하나를 요청하고 왜 설명합니다. 각각의보기 컨트롤러에는 하단에 "허가 부여"버튼이 있습니다.위치 권한 부여 후 작업을 실행하는 방법 ios

사용자가 버튼을 클릭하면 권한 대화 상자가 나타나고 사용자가 허용을 클릭하면 다음보기 컨트롤러로 전환하고 싶습니다. 여기

내가 지금 무엇을 가지고 :

내가 권한 대화가 팝업 비동기 사용 승인 검사이기 때문에 다음 즉시 닫을 때 작업을 큐에 파견을 사용하지만, 시도했습니다
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 (허용)를 클릭하면 허용됩니다. CLLocationManagerDelegate

답변

3

Conform을 그런 다음이 전화 :

스위프트 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

전자 대리인,하지만 때마다 내가 권한을 묻는 버튼을 클릭하면, 허가 대화 상자가 팝업 후 심지어 허용을 클릭하기 전에 잠깐 사라집니다. 이 일의 원인을 아십니까? –

+0

네, 위치 관리자 객체가 범위를 벗어납니다 (함수에만 존재하기 때문에 정리됩니다). 위치 관리자를 인스턴스 변수로 설정하고 다시 시도하십시오. – CodeBender