2016-03-25 36 views
0

我正在嘗試處理詢問用戶是否有權訪問攝像頭。到目前爲止,我有一個方法可以正確返回相機的當前授權狀態,並且當相機權限被拒絕時,應用程序可以正常工作。但是,如果我進入手機設置並將相機權限切換爲「允許」,當我重新啓動應用程序並嘗試啓動捕獲會話時,我不斷收到此奇怪的崩潰(我的相機在應用程序打開時立即啓動FYI)。這裏的崩潰:切換攝像頭權限導致崩潰

*終止應用程序由於未捕獲的異常 'NSGenericException',原因是:

這裏 '* AVCaptureSession不能調用beginConfiguration/commitConfiguration之間startRunning' 是代碼啓動會話(這是我commitConfiguration後):

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

後,我通過調用這個函數檢查授權狀態上面的代碼被調用。

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 

}

什麼我做錯了任何想法:與捕獲會話cameraView後,我檢查許可授權只初始化?爲什麼在開始會話前如果我commitConfiguration,這不起作用?

+0

其實它的默認行爲.... –

回答

0

您的授權碼沒有任何問題。嘗試刪除您的dispatch_async塊並開始內部捕捉viewDidAppear