UIDocumentPickerViewController не вызывает didPickDocumentAtURL для Ma c Catalyst - PullRequest
2 голосов
/ 04 марта 2020

У меня есть этот код в UIViewController, который подтверждает UIDocumentPickerDelegate:

- (void)openTextFilePicker {
    NSArray *UTIs = [NSArray arrayWithObjects:@"public.text", nil];
    [self openFilePicker:UTIs];
}

- (void)openFilePicker:(NSArray *)UTIs {
    UIDocumentPickerViewController *documentPicker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:UTIs inMode:UIDocumentPickerModeImport];
    documentPicker.delegate = self;
    documentPicker.popoverPresentationController.barButtonItem = self.importButton;
    [self presentViewController:documentPicker animated:TRUE completion:nil];
}

- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURLs:(NSArray<NSURL *> *)urls {
    [self documentPicker:controller didPickDocumentAtURL:[urls firstObject]];
}

- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url {
    NSLog(@"picked document %@", url);
}

- (void)documentPickerWasCancelled:(UIDocumentPickerViewController *)controller {
    NSLog(@"cancelled");
}

Это прекрасно работает в iOS. В Ma c Catalyst открывается средство выбора файлов, я могу перемещаться и выбирать файл, но когда я нажимаю кнопку «Открыть» в средстве выбора, ни didPickDocumentAtURLs, ни didPickDocumentAtURL не вызываются. Однако, если я нажимаю кнопку «Отмена» в средстве выбора, вызывается documentPickerWasCancelled.

При нажатии кнопки «Открыть» в консоли появляется эта ошибка:

Не удалось связать эскизы для выбранный файл URL: /// **** с файлом копии папки «Входящие»: /// ****: домен ошибки = код QLThumbnailErrorDomain = 102 «(null)» UserInfo = {NSUnderlyingError = 0x600000da9a10 {домен ошибки = код GSLibraryErrorDomain = 7 "нет места для файла: /// ****" UserInfo = {NSDescription = нет места для файла: /// ****}}}

Я подумал, что это может означать, что я У меня была проблема с настройками безопасности моей песочницы, но когда я переключаю режим выбора на UIDocumentPickerModeOpen, эта ошибка больше не возникает, но didPickDocumentAtURL по-прежнему не вызывается. В любом случае, вот мои настройки песочницы:

sandbox settings with User Selected File set to Read/Write

Я видел сообщения о том, что средство выбора документов открывается пустым, но здесь проблема не в этом. Я видел только один пост, который, кажется, подтверждает, что он работает, но он использовал Swift ... может ли он работать в Swift, но не работает в Objective C? Что-то еще мне не хватает, чтобы заставить эту работу?

ОБНОВЛЕНИЕ

Вот новый проект Xcode с минимальным кодом для демонстрации проблема. Как и в моем полном проекте, это прекрасно работает на iOS, но не вызывает методы делегата didPickDocument... на Ma c.

1 Ответ

2 голосов
/ 06 марта 2020

Насколько я вижу, вы только что сделали опечатку в сигнатуре метода, правильное значение

- (void)documentPicker:(UIDocumentPickerViewController *)controller 
didPickDocumentsAtURLs:(NSArray <NSURL *>*)urls {
    NSLog(@"picked URLs %@", urls);
    // selecting multiple documents is cool, but requires iOS 11
    [self documentPicker:controller didPickDocumentAtURL:[urls firstObject]];
}

на iOS сработало, потому что устаревшая версия все еще поддерживает

- (void)documentPicker:(UIDocumentPickerViewController *)controller 
  didPickDocumentAtURL:(NSURL *)url; 

но macOS / Catalyst этого не делает, поэтому ваш делегат просто не вызван из-за отсутствия метода.

Протестировано и работает с Xcode 11.2

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