无法使用 UIDocumentPicker 导入页面和编号文档

Posted

技术标签:

【中文标题】无法使用 UIDocumentPicker 导入页面和编号文档【英文标题】:Unable to import pages and numbers documents with UIDocumentPicker 【发布时间】:2015-03-12 09:23:48 【问题描述】:

我正在开发一个能够存储云文档的应用。 此应用可以选择使用新的UIDocumentPickerViewController 从其他应用导入数据。 一切正常,我可以显示选择器视图控制器。 这是我用来导入文件的代码:

- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url 



if (controller.documentPickerMode == UIDocumentPickerModeImport) 

    dispatch_async(dispatch_get_main_queue(), ^



        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder

         NSString*  path=[NSString stringWithFormat:@"%@/MyHandyTap/%@/%@",documentsDirectory,self.cartella,[url lastPathComponent]];

        BOOL startAccessingWorked = [url startAccessingSecurityScopedResource];
        NSURL *ubiquityURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];

        __block NSData *data;

        NSFileCoordinator *fileCoordinator = [[NSFileCoordinator alloc] init];
        NSError *error;
        [fileCoordinator coordinateReadingItemAtURL:url options:0 error:&error byAccessor:^(NSURL *newURL) 

            data = [NSData dataWithContentsOfURL:newURL];

            [data writeToFile:path atomically:YES];

        ];
        [url stopAccessingSecurityScopedResource];

    

使用此代码,我可以导入许多不同的文件格式(.pdf、.txt、.rtf、.doc 等),但是如果我尝试从 iCloud 导入文件 .pages 或 .numbers 文件,则调用[NSData dataWithContentsOfURL:newURL] 返回null

是否可以让用户导入这些类型的文件?

我已将此处列出的文档标记为红色 https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/FileProvider.html#//apple_ref/doc/uid/TP40014214-CH18-SW2 我已经下载了这里列出的示例:https://developer.apple.com/devcenter/download.action?path=/wwdc_2014/wwdc_2014_sample_code/newboxanintroductiontoiclouddocumentenhancementsinios8.0.zip 但是我无法弄清楚如何解决这个问题。

提前感谢您的帮助

安德烈亚

【问题讨论】:

【参考方案1】:

即使我没有对其进行测试,但您可能会遇到问题,因为 .pages 或 .numbers 类型的文档不是单个文件,而是捆绑包。所以你不能用-dataWithContentsOfURL:阅读它们。

您是否使用-copyItemAtURL:toURL:error: (NSFileManager) 检查复制?

【讨论】:

您好,您的回答为我指明了正确的解决方案。我试图将 .pages 和 .numbers 上传到 Web 服务器(以便将它们存储在个人云中)。但是,因为这些不是简单的文件,而是捆绑包,所以我遇到了很多问题。在上传之前压缩它们并在下载后解压缩它们解决了我的问题。 当然这是处理“捆绑问题”的另一种方法。 你能帮忙***.com/questions/30613645/…

以上是关于无法使用 UIDocumentPicker 导入页面和编号文档的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 UIDocumentPicker 将 pdf 文件导入表格视图单元格

无法使用 UIViewRepresentable 和 UIDocumentPicker 选择文件夹

在 iOS 中导入文件:UIDocumentPicker 与 UIDocumentBrowser

快速在 UIDocumentPicker 中设置文档扩展名

从 UIDocumentPicker 下载文件并等待下载完成

UIDocumentPicker 导航栏按钮在 iOS 11 中隐藏