首页 > 解决方案 > UIImagePickerController 只能在主线程中使用 | 应用程序崩溃

问题描述

大家好,我UIImagePickerControlleriOS 14中实现。当用户选择相机时,当用户同意使用相机时,我的应用程序崩溃,在 xcode 上以紫色返回此错误

- [UIImagePickerController init] must be used from main thread only

我怎么解决这个问题?感谢大家的建议

private func cameraAuth(auth sourceType: UIImagePickerController.SourceType) {
    switch AVCaptureDevice.authorizationStatus(for: .video) {
    case .denied: imagePickerAuthDenied()
    case .restricted: imagePickerAuthRestricted()
    case .authorized: showImagePicker(sourceType: sourceType)
   
    case .notDetermined:

        AVCaptureDevice.requestAccess(for: .video) { (success) in
            if success { self.showImagePicker(sourceType: sourceType) }
            else { self.imagePickerAuthDenied() }
        }
        
    default : print("Default Switch Camera Auth")
    }
}

private func showImagePicker(sourceType: UIImagePickerController.SourceType) {
   
    let imagePickerController = UIImagePickerController()
    imagePickerController.delegate = self
    imagePickerController.sourceType = sourceType
    imagePickerController.allowsEditing = true
    present(imagePickerController, animated: true, completion: nil)
}

在此处输入图像描述

标签: iosswiftxcodeuiimagepickercontroller

解决方案


您需要将代码包装authorizationStatus/AVCaptureDevice.requestAccess(for: .video) { (success) in DispatchQueue.main.async

AVCaptureDevice.authorizationStatus(for: .video) {
   DispatchQueue.main.async {
     ///
   }
}

AVCaptureDevice.requestAccess(for: .video) { (success) in 
   DispatchQueue.main.async {
     ///
   }
}

推荐阅读