gpt4 book ai didi

ios - 使用自定义 UTI 删除 UIDocumentPicker 导入/导出

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:17:27 32 4
gpt4 key购买 nike

我有一个应用程序可以使用自定义文件(具有自定义扩展名/UTI)存储用户创建的内容,并希望它使用 UIDocumentPicker 支持 iCloud Drive。

1.问题是,一旦文件被导入,它就会变灰,无法导入。尝试了几件事后,我发现问题出在自定义 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) 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 文件中提供的正确标识符(在我的示例中为“de .myDomain.foobar.alb").

关于ios - 使用自定义 UTI 删除 UIDocumentPicker 导入/导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26001870/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com