Pon*_*onf 3 objective-c ios ios8
我已UIDocumentPickerViewController根据文档实现,现在尝试从委托方法中的拾取文件中获取NSData,但[[NSData alloc] initWithContentsOfURL:]返回nil:
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url{
NSData* documentData = [[NSData alloc] initWithContentsOfURL:url];
//documentData is nil
documentData = [[NSData alloc] initWithContentsOfFile:[url path]];
//documentData is still nil :(
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Xcode6 beta6,iPhone模拟器,文件选择器模式UIDocumentPickerModeImport.尝试检索保存到iCloude Drive的文档.
详细阐述@ cescofry在这里对iWork文件(.pages,.numbers,.key)的回答,以便其他人不必重新发现问题.(这也适用于非iWork文件.)
如果您从iCloud中提取iWork文件,则需要先担心两个主要问题才能获得有效的NSData对象.A)通过NSFileCoordinator对象(由@cescofry覆盖)和B)的安全范围iWork文件实际上是目录/包而不是单个文件.options你想要的参数coordinateReadingItemAtURL:是NSFileCoordinatorReadingForUploading.这将读取单个文件,就像您使用过一样0,但会自动将目录转换为zip文件.剥离.zip已添加的内容,您将拥有有效的Pages/Numbers/Keynote文件.(它也适用于它.)
[url startAccessingSecurityScopedResource];
NSFileCoordinator *coordinator = [[NSFileCoordinator alloc] init];
NSError *error;
__block NSData *fileData;
[coordinator coordinateReadingItemAtURL:url options:NSFileCoordinatorReadingForUploading error:&error byAccessor:^(NSURL *newURL) {
// File name for use in writing the file out later
NSString *fileName = [newURL lastPathComponent];
NSString *fileExtension = [newURL pathExtension];
if([fileExtension isEqualToString:@"zip"]) {
if([[[newURL URLByDeletingPathExtension] pathExtension] isEqualToString:@"pages"] ||
[[[newURL URLByDeletingPathExtension] pathExtension] isEqualToString:@"numbers"] ||
[[[newURL URLByDeletingPathExtension] pathExtension] isEqualToString:@"key"] ) {
// Remove .zip if it is an iWork file
fileExtension = [[newURL URLByDeletingPathExtension] pathExtension];
fileName = [[newURL URLByDeletingPathExtension] lastPathComponent];
}
}
NSError *fileConversionError;
fileData = [NSData dataWithContentsOfURL:newURL options:NSDataReadingUncached error:&fileConversionError];
// Do something with the file data here
}
[url stopAccessingSecurityScopedResource];
Run Code Online (Sandbox Code Playgroud)
有关NSFileCoordinator选项的相关Apple文档,请访问:https: //developer.apple.com/library/ios/documentation/Foundation/Reference/NSFileCoordinator_class/#//apple_ref/c/tdef/NSFileCoordinatorReadingOptions
| 归档时间: |
|
| 查看次数: |
3317 次 |
| 最近记录: |