【发布时间】:2020-03-04 02:04:56
【问题描述】:
我在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 中运行良好。在 Mac Catalyst 中,文件选择器打开,我可以导航并选择一个文件,但是当我单击选择器中的打开按钮时,既不会调用 didPickDocumentAtURLs 也不会调用 didPickDocumentAtURL。但是,如果我单击选择器中的取消按钮,则会调用 documentPickerWasCancelled。
当我单击打开时,控制台中出现此错误:
未能将所选 URL 文件:///**** 的缩略图与 收件箱复制文件:///****:错误域=QLThumbnailErrorDomain 代码=102 “(空)” UserInfo={NSUnderlyingError=0x600000da9a10 {错误 Domain=GSLibraryErrorDomain Code=7 "没有存储文件:///****" UserInfo={NSDescription=no storage for file:///****}}}
我认为这可能意味着我的沙盒安全设置有问题,但是当我将选择器模式更改为 UIDocumentPickerModeOpen 时,该错误不再发生,但仍然没有调用 didPickDocumentAtURL。无论如何,这是我的沙盒设置:
我已经看到有关文档选择器打开空白的帖子,但这不是问题所在。我只看到一篇似乎证实它确实有效的帖子,但那是使用 Swift ......它是否可以在 Swift 中工作但在 Objective C 中被破坏?我还缺少其他东西来完成这项工作吗?
更新
这里是a new Xcode project,其中包含演示问题的最少代码。与我的完整项目一样,这在 iOS 上运行良好,但在 Mac 上不调用 didPickDocument... 委托方法。
【问题讨论】:
标签: ios objective-c mac-catalyst uidocumentpickerviewcontroller