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