我们正在使用iOS的UIDocumentMenuViewController / UIDocumentPickerViewController API,但这个问题只发生在Google云端硬盘上,所以我将从这里开始。如果您认为我们应该向Apple发送错误报告,请告诉我。
在我们的应用程序或最小的单视图应用程序中,我们显示文档菜单,然后显示选择器。当我们查看Google云端硬盘时,具有特定扩展名(iges,sldprt,stl)的文件始终显示为已禁用。其他常见的扩展(tiff,jpg)和与CAD相关的扩展(sat,x_t,step)工作正常。
无论文件是空的,包含JPG,包含CAD数据等,都会发生这种情况。
Dropbox不会发生这种情况 - 仅适用于Google云端硬盘。
Here’s a shot of how Drive looks以及一些(最小的,我希望)示例代码。
谢谢,
- 迈克
- (void)pick {
UIDocumentMenuViewController *importMenu =
[[UIDocumentMenuViewController alloc] initWithDocumentTypes:@[(NSString *)kUTTypeItem]
inMode:UIDocumentPickerModeImport];
importMenu.delegate = self;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
[self presentViewController:importMenu animated:YES completion:nil];
}
else
{
UIPopoverController *popup = [[UIPopoverController alloc] initWithContentViewController:importMenu];
[popup presentPopoverFromRect:CGRectMake(100, 100, 200, 200)
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
}
}
答案 0 :(得分:2)
由于这适用于内置的iCloud Drive选择器,我担心这是Google Drive选择器中的错误。他们必须确保通过UTTypeCreatePreferredIdentifierForTag从文件扩展名创建标记来测试传入UTI的一致性。然后他们必须检查UTI是否符合所请求的那个。
另外,您在代码示例中呈现视图控制器的方式非常简单。一个更好的方法是:
UIDocumentMenuViewController *importMenu = [[UIDocumentMenuViewController alloc] initWithDocumentTypes:@[(NSString *)kUTTypeItem] inMode:UIDocumentPickerModeImport];
...
[self presentViewController:importMenu animated:YES completion:nil];
vc.popoverPresentationController.sourceView = self.view;
vc.popoverPresentationController.sourceRect = CGRectMake(100, 100, 200, 200);
这摆脱了丑陋的if(成语)声明。