arl*_*dia 3 objective-c ios uidocumentpickerviewcontroller mac-catalyst
我在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");
}
Run Code Online (Sandbox Code Playgroud)
这在 iOS 中运行良好。在 Mac Catalyst 中,文件选择器打开,我可以导航和选择一个文件,但是当我单击选择器中的打开按钮时,既不调用didPickDocumentAtURLs也不didPickDocumentAtURL调用。但是,如果我单击选择器中的取消按钮,documentPickerWasCancelled则会调用。
当我单击打开时,控制台中出现此错误:
无法将选取的 URL 文件的缩略图关联到收件箱副本文件:///****:错误域=QLThumbnailErrorDomain Code=102 "(null)" UserInfo={NSUnderlyingError=0x600000da9a10 {Error Domain=GSLibraryErrorDomain Code=7“文件无存储空间:///****” UserInfo={NSDescription=文件无存储空间:///****}}}
我认为这可能意味着我的沙箱安全设置有问题,但是当我将选择器模式更改为 时UIDocumentPickerModeOpen,该错误不再发生,但didPickDocumentAtURL仍然没有被调用。无论如何,这是我的沙箱设置:
我看过有关文档选择器打开空白的帖子,但这不是问题所在。我只看过一篇似乎证实它确实有效的帖子,但那是使用 Swift ......它是否可以在 Swift 中工作但在 Objective C 中被破坏?我还缺少其他东西来完成这项工作吗?
更新
这是一个新的 Xcode 项目,用最少的代码来演示这个问题。与我的完整项目一样,这在 iOS 上运行良好,但不会didPickDocument...在 Mac 上调用委托方法。
据我所知,您刚刚在方法签名中打错了字,正确的是
- (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]];
}
Run Code Online (Sandbox Code Playgroud)
在 iOS 上工作,因为仍然支持弃用的旧版
- (void)documentPicker:(UIDocumentPickerViewController *)controller
didPickDocumentAtURL:(NSURL *)url;
Run Code Online (Sandbox Code Playgroud)
但是 macOS/Catalyst 没有,因此您的委托只是由于缺少方法而没有被调用。
已测试并适用于 Xcode 11.2
| 归档时间: |
|
| 查看次数: |
905 次 |
| 最近记录: |