2016-03-25 3 views
0

Я пытаюсь обращаться с запросом к пользователю для доступа к камере. До сих пор у меня есть метод, который правильно возвращает текущий статус авторизации для камеры, а когда разрешение камеры отклонено, приложение работает нормально.Переключение разрешений камеры вызывает сбой

Однако, если я зашел в настройки своего телефона и переключил разрешение камеры на «Разрешить», я все время получаю этот странный сбой при перезагрузке приложения и пытаюсь запустить сеанс захвата (моя камера запускается сразу же после открытия приложения FYI). Вот авария:

* Нагрузочное приложение из-за неперехваченное исключение 'NSGenericException', причина: '* AVCaptureSession не может startRunning между вызовами beginConfiguration/commitConfiguration'

Вот код начать сеанс (который после I commitConfiguration):

dispatch_async(captureSessionQueue) { 
     self.captureSession.startRunning() 
    } 

Приведенный выше код вызывается после того, проверить состояние авторизации с помощью этой функции. CameraView с сессией захвата инициализируется только после того, как я могу проверить, что разрешение Авторизованный:

public func IsCameraAuthorized() -> AVAuthorizationStatus { 
var authorizationStatus = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo) 
switch authorizationStatus { 
case .NotDetermined: 
    // permission dialog not yet presented, request authorization 
    AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo) { granted in 
     if granted { 
      authorizationStatus = .Authorized 
     } else { 
      // user denied 
      authorizationStatus = .Denied 
     } 
    } 
    break 
case .Authorized: 
    // go 
    break 
case .Denied, .Restricted: 
    // the user explicitly denied camera usage or is not allowed to access the camera devices 
    break 
} 

return authorizationStatus 

}

Любые мысли о том, что я делаю неправильно? Почему это не работает, если я завершаю настройку перед началом сеанса?

+0

на самом деле его поведение по умолчанию .... –

ответ

0

В вашем авторизационном коде ничего не получилось. Попробуйте удалить блок dispatch_async и начните съемку внутри viewDidAppear

Смежные вопросы