我们使用的是 iOS 的 UIDocumentMenuViewController/UIDocumentPickerViewController API,但是这个问题只发生在 Google Drive,所以我从这里开始。如果您认为我们应该向 Apple 发送错误报告,请告诉我。

在我们的应用程序或最小的单 View 应用程序中,我们先显示文档菜单,然后是选择器。当我们查看 Google Drive 时,带有某些扩展名(iges、sldprt、STL)的文件总是显示为禁用。其他常见的扩展(tiff、jpg)和 CAD 相关的扩展(sat、x_t、step)工作正常。

无论文件为空、包含 JPG、包含 CAD 数据等,都会发生这种情况。

Dropbox 不会发生这种情况——只有 Google Drive。

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];
}

}

最佳答案

由于这适用于内置的 iCloud Drive 选择器,我担心这是 Google Drive 选择器中的一个错误。他们必须确保通过 UTTypeCreatePreferredIdentifierForTag 从文件扩展名创建标签来测试对传入 UTI 的一致性;然后他们必须检查该 UTI 是否符合所请求的 UTI 之一。

顺便说一句,您在代码示例中呈现 View Controller 的方式非常单调。更好的方法如下:

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(idiom) 语句。

关于google-drive-api - 通过 iOS 的选择器查看 Google 云端硬盘时,某些文件扩展名始终显示为禁用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34744770/

10-13 05:43