使用自定义UTI的iCloud文档选择器

时间:2015-05-06 14:07:13

标签: ios ios8 icloud uti icloud-drive

UIDocumentPickerViewController initWithDocumentTypes是否需要公共UTI才能运行?

我正在尝试利用iCloud Documents来允许用户从iCloud Drive导入专有文件类型。测试适用于公共UTI,例如:@"public.text"

如果我在initWithDocumentTypes数组中没有包含公共UTI,我会看到一个屏幕指示:

  

没有文件。 iCloud Drive中的文档不可用,因为   iCloud Documents&数据设置已禁用。

我的导入UTI在Target>中定义。信息为“com.domain.file”。我必须相信这是正确设置的,因为我可以在另一个应用程序中选择我的一个专有文件(例如Dropbox),我的应用程序显示在Open In ...选项中。

在我的导入操作中,我尝试了我能想到的每个变体,让我的自定义UTI显示选择器。

- (IBAction)importDocumentPickerTapped:(id)sender
{
    UIDocumentPickerViewController *documentPicker = [[UIDocumentPickerViewController alloc initWithDocumentTypes:@[@"com.domain.file", @"com.domain.app.file", @"iCloud.com.domain.file", @"iCloud.com.domain.app.file" ] inMode:UIDocumentPickerModeImport];
    documentPicker.delegate = self;
    documentPicker.modalPresentationStyle = UIModalPresentationFormSheet;
    [self presentViewController:documentPicker animated:YES completion:nil];
}

如果我将@"public.text"添加到initWithDocumentTypes阵列,则会按预期显示iCloud Drive Locations选择器屏幕。我可以选择.txt和.rtf文件,但我的自定义文件类型显示为灰色且无法选择。

注意:

  1. 我没有创建文档提供程序扩展,因为我认为这不是必需的,而且我的文件格式并不常见。
  2. 当我对UIDocumentPickerViewController采取任何操作时,我看到以下警告,即使它是取消,即使文件上的操作(即保存.txt)有效。我花了很多时间试图追查这个警告的来源,但没有用。
  3.   

    插件com.apple.UIKit.fileprovider.default无效

1 个答案:

答案 0 :(得分:2)

我遇到了这个问题并通过让我的自定义导出的UTI符合'public.data'UTI来解决这个问题。

您可以通过选择目标然后选择信息标签来设置此项。滚动到“导出的UTI”部分并展开它。在您的自定义UTI下,有一个框来声明它符合。

请在此处查看系统定义的UTI列表: https://developer.apple.com/library/ios/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html