我有一个应用程序来存储用户创建的内容和自定义文件(带有自定义扩展/ UTI),并希望它使用UIDocumentPicker支持iCloud Drive。
1。 问题是,一旦导入文件,它就会变灰并变得无法导入。 在尝试了几件事之后,我发现问题出在了custum 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;
}
答案 0 :(得分:1)
如果仍然出现此问题,或者其他人面临同样的问题,我就是这样做的:
1)info.plst中的UTI声明:
<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文件中提供的正确标识符(在我的示例中&#34; de.myDomain.foobar.alb&# 34。)