У меня есть этот код в 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
по-прежнему не вызывается. В любом случае, вот мои настройки песочницы:
Я видел сообщения о том, что средство выбора документов открывается пустым, но здесь проблема не в этом. Я видел только один пост, который, кажется, подтверждает, что он работает, но он использовал Swift ... может ли он работать в Swift, но не работает в Objective C? Что-то еще мне не хватает, чтобы заставить эту работу?
ОБНОВЛЕНИЕ
Вот новый проект Xcode с минимальным кодом для демонстрации проблема. Как и в моем полном проекте, это прекрасно работает на iOS, но не вызывает методы делегата didPickDocument...
на Ma c.