Я использую камеру устройства, чтобы щелкать несколько изображений. Приведенный ниже код отлично работает почти у 90% пользователей, но дает сбой у остальных.
_session = [AVCaptureSession new];
_session.sessionPreset = AVCaptureSessionPresetPhoto;
//
// setup device
//
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if ([device lockForConfiguration:nil]) {
if (device.autoFocusRangeRestrictionSupported) {
device.autoFocusRangeRestriction = AVCaptureAutoFocusRangeRestrictionNear;
}
if (device.smoothAutoFocusSupported) {
device.smoothAutoFocusEnabled = YES;
}
if ([device isFocusModeSupported:AVCaptureFocusModeContinuousAutoFocus]){
device.focusMode = AVCaptureFocusModeContinuousAutoFocus;
}
device.exposureMode = AVCaptureExposureModeContinuousAutoExposure;
[device unlockForConfiguration];
}
//
// add device input to session
//
AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
[_session addInput:deviceInput];
Из журналов сбоев написано [AVCaptureSession addInput:] Невозможно добавить нулевой AVCaptureInput, что в основном означает, что для некоторых пользователей объект deviceInput становится нулевым. Может ли кто-нибудь помочь мне с основной причиной этого или в каких сценариях этот объект может быть нулевым, поскольку он отлично работает для большинства пользователей.
Согласно документации для этого метода, похоже, что это может произойти, если устройство больше не доступно или не используется:
Возможно, пользователь предоставил доступ к камере вашему приложению, начал сканирование, затем отклонил разрешение и попытался начать сканирование снова. Другая возможность заключается в том, что они использовали камеру в другом приложении и быстро переключились на ваше, не давая камере достаточно времени для разблокировки для использования.
Если пользователь начал сканирование, а затем отклонил разрешение, iOS принудительно перезапускает приложение, поэтому сбой в этом случае невозможен.
попробуйте проверить на
authorizationStatusForMediaType
.. наavailableCameraDevices
... добавьте deviceInput, только если не nil ... подробнее здесь objc.io/issues/21-camera-and-photos/camera-capture-on-ios