У меня есть WKWebview, который показывает страницу, код которой, в общем, является. Я хочу сделать некоторую обработку, когда пользователь выбирает файл. Поэтому я устанавливаю делегата для доступных средств выбора (Изображение и Документ) и обработаю вывод. Я сохраняю исходный делегат и, когда мой код вызывается и моя обработка завершается, я перезваниваю, чтобы он возвращал URL-адреса в веб-просмотр.
Этот поток прекрасно работает для ImagePicker. Проблема в том, когда я вызываю оригинальный делегат для UIDocumentPicker. Кидает с
* - [WKFileUploadPanel documentPicker: didPickDocumentsAtURLs:]: нераспознанный селектор, отправленный на экземпляр *
Это повторяется даже без какой-либо обработки, как показано здесь.
Данные действительны (я вижу значения URL при отладке).
Естественно, что выполнять обработку без вызова исходного делегата невозможно, если обработка выполняется и на стороне HTML.
UIDocumentPickerViewController* originalDocumentPicker;
id<UIDocumentPickerDelegate> documentPickerOriginalDelegate;
-(void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion {
if ([viewControllerToPresent class] == [UIDocumentPickerViewController class])
{
originalDocumentPicker = (UIDocumentPickerViewController*)viewControllerToPresent;
documentPickerOriginalDelegate = originalDocumentPicker.delegate;
[originalDocumentPicker setDelegate:self];
[super presentViewController:viewControllerToPresent animated:flag completion:completion];
} else {
[super presentViewController:viewControllerToPresent animated:flag completion:completion];
}
}
// delegate for UIDocumentPickerViewController
- (void)documentPicker:(UIDocumentPickerViewController *)controller
didPickDocumentsAtURLs:(NSArray<NSURL *> *)urls
{
if (@available(iOS 11.0, *)) {
@try{
[documentPickerOriginalDelegate documentPicker:originalDocumentPicker didPickDocumentsAtURLs:urls];
}
@catch (NSException * e) {
NSLog(@"Error %@", e.reason);
}
} else {
// Fallback on earlier versions
NSLog(@"iOS 10-");
}
}
Есть идеи, как это преодолеть?