2014-09-23 51 views
2

我有一个应用程序来存储用户创建的内容与自定义文件(自定义扩展/ UTI),并希望它支持使用UIDocumentPicker的iCloud驱动器。删除UIDocumentPicker导入/导出与自定义UTI

1. 问题是,一旦文件被导入,它就会变灰,变得无法导入。 尝试了几件事情后,我发现问题出在custome UTI上。 如果我只是将文件扩展名更改为一个知名的文件扩展名,例如pdf,它就可以工作。

我还使用了下面的示例代码(只是选择一个文档,并且什么都不做)来测试。 如果我选择一个带有自定义扩展名的文件,它将在导入一次后变为灰色。 pdf文件没有问题 - 我可以一次又一次地导入它们。

我错过了什么吗?

2. 另一个问题是,如果我将文档类型指定为@“public.composite-content”,我可以在根中选择一个pdf文档,但不能访问包含pdf文件的文件夹。如果我使用kUTTypePDF,我可以做到这一点。 这是预期的行为,还是只是一个错误?


-(void)openDocumentPicker 
{ 
    UIDocumentPickerViewController *vc = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[@"public.composite-content"] inMode:UIDocumentPickerModeImport]; 
    vc.delegate = self; 
    vc.modalPresentationStyle = UIModalPresentationFormSheet; 
    [self presentViewController:vc animated:YES completion:nil]; 
} 

- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url { 
    return; 
} 

回答

1

如果你仍然有这个问题,或其他人面临同样的,这是我得到它的工作:

1)UTI声明中info.plst:

<key>UTExportedTypeDeclarations</key> 
    <array> 
      <dict> 
        <key>UTTypeConformsTo</key> 
        <array> 
          <string>public.data</string> 
        </array> 
        <key>UTTypeDescription</key> 
        <string>Holiday backup file</string> 
        <key>UTTypeIdentifier</key> 
        <string>de.myDomain.foobar.alb</string> 
        <key>UTTypeTagSpecification</key> 
        <dict> 
          <key>public.filename-extension</key> 
          <array> 
            <string>alb</string> 
          </array> 
          <key>public.mime-type</key> 
          <string>application/alb</string> 
        </dict> 
      </dict> 
    </array> 
    <key>CFBundleDocumentTypes</key> 
    <array> 
      <dict> 
        <key>CFBundleTypeName</key> 
        <string>Holiday backup file</string> 
        <key>CFBundleTypeRole</key> 
        <string>Editor</string> 
        <key>LSHandlerRank</key> 
        <string>Owner</string> 
        <key>LSItemContentTypes</key> 
        <array> 
          <string>de.myDomain.foobar.alb</string> 
        </array> 
      </dict> 
    </array> 

UTTypeConformsTo/public.data是这里的重要部分。

2)UIDocumentPicker

 UIDocumentPickerViewController* dvc= [[UIDocumentPickerViewController alloc] initWithDocumentTypes:[NSArray arrayWithObject:@"de.myDomain.foobar.alb"] inMode:UIDocumentPickerModeImport]; 

所以在你上面的例子,你初始化的选择器与@"public.composite-content",而你应该用你的info.pls文件中提供(在我的例子“de.myDomain正确的标识符。 foob​​ar.alb“)。