DocumentPicker выбрасывает при использовании делегата - PullRequest
0 голосов
/ 24 января 2019

У меня есть 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-");
  }
}

Есть идеи, как это преодолеть?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...