在我的swift应用程序中,这是我要求麦克风和摄像头权限的代码。
class func requestCameraPermission(completionBlock:(Bool throws -> Void)) rethrows {
if (AVCaptureDevice.respondsToSelector(Selector("requestAccessForMediaType:completionHandler"))) {
AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: {
granted in
dispatch_async(dispatch_get_main_queue()) {
try! completionBlock(granted)
}
})
} else {
try! completionBlock(true)
}
}
class func requestMicrophonePermission(completionBlock:(Bool throws -> Void)) rethrows {
if AVAudioSession.sharedInstance().respondsToSelector("requestRecordPermission:") {
AVAudioSession.sharedInstance().requestRecordPermission {
granted in
dispatch_async(dispatch_get_main_queue()) {
try! completionBlock(granted)
}
}
}
}
这是我必须附加相机的代码,如果缺少某些权限则显示错误。
func attachCamera() {
do {
try self.camera.start()
} catch BESwiftCameraErrorCode.CameraPermission {
self.showCameraPermissionAlert()
} catch BESwiftCameraErrorCode.MicrophonePermission {
self.showMicrophonePermissionAlert()
print("mic error!!")
} catch {
self.showUnknownErrorAlert()
}
}
我试过不允许相机许可。我看到一个警告框说我需要相机权限。该应用程序不会崩溃。
但是当我尝试不允许麦克风许可时,应用程序崩溃了。
在崩溃日志中突出显示此行:
try! completionBlock(granted)
这个错误:
fatal error: 'try!' expression unexpectedly raised an error: TestApp.CameraErrorCode.MicrophonePermission: file /Library/Caches/com.apple.xbs/Sources/swiftlang_PONDEROSA/swiftlang_PONDEROSA-700.1.101.6/src/swift/stdlib/public/core/ErrorType.swift, line 50
造成这种情况的原因是什么?如何显示麦克风权限警报而不是应用程序崩溃?