5

我正在开发我的存储提供程序并使用 Apple 的“NewBox”(它的链接已过期)示例代码作为主机应用程序。理想情况下,我希望看到我可以将文件从存储提供商导入(复制)到我的 NewBox 的沙箱或导出/移动文件到其他应用程序。

在 NewBox 主机应用程序中,当我想导入文件时,我使用:

UIDocumentMenuViewController *vc = [[UIDocumentMenuViewController alloc] initWithDocumentTypes:@[(NSString *)kUTTypeRTF,(NSString *)kUTTypePNG,(NSString *)kUTTypeText,(NSString *)kUTTypePlainText,(NSString *)kUTTypePDF, (NSString *)kUTTypeImage] inMode:UIDocumentPickerModeImport];



一旦我拿起一个文件,在我的 UIDocumentPickerExtensionViewController 中,我调用:

- (void)pickDocument:(NSURL *)documentURL {
    [self dismissGrantingAccessToURL:documentURL];
}


调用dismissGrantingAccessToURL 后,选择器的视图将关闭并返回到宿主应用程序,并且将调用宿主应用程序的didPickDocumentAtURL。

但是,“didPickDocumentAtURL”接收的是我选择的原始文件的 URL,而不是系统复制到 NewBox 沙箱的新 URL。这对于出口和搬家的情况也很熟悉。我误解了导入/导出/移动吗?我认为这个关于文件的操作,例如复制到主机应用程序的沙箱是由系统完成的,主机应用程序将获得要访问的文件的新 URL。

我在iOS8 beta4上试过了,这个问题依然存在。

谢谢!

4

1 回答 1

3

您从中获取的 URLdocumentPicker:didPickDocumentAtURL:取决于操作:

  • 进出口:/data/Containers/Data/Application/$(AppIDOfAppPresentingUIDocumentPickerViewController)/tmp/DocumentPickerIncoming/File.txt

  • 打开/移动: /data/Containers/Shared/AppGroup/$(ExtensionAppGroupID)/File%20Provider%20Storage/File.txt

其中“File.txt”可以是任何文件名或文件路径。

在导入的情况下,呈现选择器的应用程序负责将给定 URL 处的文件移动到永久位置。在打开或移动的情况下,应用程序可能应该保存 URL 以供将来使用(始终在文件协调器中使用它)。在导出的情况下,通常会忽略 URL。

NewBox 项目可以从 Apple 的网站下载https://developer.apple.com/devcenter/download.action?path=/wwdc_2014/wwdc_2014_sample_code/newboxanintroductiontoiclouddocumentenhancementsinios8.0.zip

于 2014-10-23T14:14:29.533 回答