无法使用 UIDocumentPicker 导入页面和数字文档
Unable to import pages and numbers documents with UIDocumentPicker
我正在开发一款能够存储云文档的应用程序。
此应用程序将可以选择使用新 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]
returns 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
但是我不知道如何解决这个问题。
提前感谢您的帮助
安德里亚
即使我没有测试它,但您可能会遇到问题,因为 .pages 或 .numbers 类型的文档不是单个文件,而是捆绑包。所以你不能用 -dataWithContentsOfURL:
.
阅读它们
您是否使用 -copyItemAtURL:toURL:error:
(NSFileManager
) 检查复制?
我正在开发一款能够存储云文档的应用程序。
此应用程序将可以选择使用新 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]
returns 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 但是我不知道如何解决这个问题。
提前感谢您的帮助
安德里亚
即使我没有测试它,但您可能会遇到问题,因为 .pages 或 .numbers 类型的文档不是单个文件,而是捆绑包。所以你不能用 -dataWithContentsOfURL:
.
您是否使用 -copyItemAtURL:toURL:error:
(NSFileManager
) 检查复制?