摄像头访问请求失败 - 但只有第一次访问摄像头时Swift 3

时间:2017-05-31 05:03:32

标签: ios swift camera

此iOS应用程序使用相机将图像放置在主详细信息应用程序的详细视图中。安装应用程序并首次请求拍摄照片操作时,应用程序崩溃。如代码所示,请求访问,并向用户显示请求访问的警报。一旦授予完成处理程序报告成功并且应用程序崩溃。如果我重新启动应用程序(不重新安装),相机会按预期执行并继续执行此操作。从iPhone中删除应用程序并重新安装始终会产生完全相同的结果。

控制台输出: AVAuthorizationStatus未确定 用户授予了许可 libc ++ abi.dylib:以NSException类型的未捕获异常终止

任何帮助将不胜感激。 iOS 10,Xcode 8,Swift 3

编辑:它在AVCaptureRequest中崩溃。如果我注释掉AVCaptureRequest,应用程序不会崩溃(当然没有照片)。

@IBAction func takeDrugPhoto(_ sender: UIButton) {


    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) {

        let authStatus = AVCaptureDevice.authorizationStatus(forMediaType: AVMediaTypeVideo)

        switch authStatus {

        case AVAuthorizationStatus.authorized:
            print("AVAuthorizationStatus is Authorized")

.....这里有一堆代码......

        case AVAuthorizationStatus.denied:
            print("AVAuthorizationStatus is Denied")

.....这里的一些代码......

        case AVAuthorizationStatus.notDetermined:
            print("AVAuthorizationStatus is NotDetermined")


            AVCaptureDevice.requestAccess(forMediaType: AVMediaTypeVideo, completionHandler: { (success) in

                if success {
                    print("The user granted permission")

                } else {
                    print("put up an alert telling the user the camera is not available")

                    DispatchQueue.main.async(execute: { () -> Void in
                        let ac = UIAlertController(title: "Camera Error", message: "For some reason, the camera in this device is not accepting your authorization. Check with your device supplier.", preferredStyle: .alert)
                        ac.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil))
                        self.present(ac, animated: true, completion: nil)
                    })//back on main queue block
                }//if success

            })//requestAccessForMediaType block


        }//switch

    } else {//if device has a camera

        let ac = UIAlertController(title: "Source not available.", message: "The camera is not available.", preferredStyle: .alert)
        ac.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil))
        present(ac, animated: true, completion: nil)

    }//if camera is no else

}//takeDrugPhoto

来自追踪:

1 个答案:

答案 0 :(得分:0)

当您通过AVCaptureDevice.requestAccess请求寻求用户权限时,iOS会显示一个警告对话框,其中包含您在info.plist中创建的消息。当用户授予权限时,它会显示为iOS然后将应用程序视为从后台返回(即使它不会消失)。这是我的问题。我已经构建了一个登录序列,以便在应用程序作为安全性的一部分从后台返回时激活。我已禁用该接口进行测试 - 因此失败了。我希望其他人会觉得这很有用。