通过iOS的选择器查看Google云端硬盘时,某些文件扩展名始终显示为已停用

时间:2016-01-12 13:17:29

标签: google-drive-api

我们正在使用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];
}

}

1 个答案:

答案 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(成语)声明。