如何在选择文档之前在iCloud中查找文档的大小并使用UIDocumentPickerViewController下载到设备

时间:2016-11-29 14:09:14

标签: ios icloud uidocumentpickervc

如何在选择iCloud并使用UIDocumentPickerViewController下载到设备之前查找文档的大小。我可以将文档下载到设备然后转换为NSData,我可以确定文件大小,但是我们可以避免下载文档本身并在下载之前预先确定文件大小。我在uidocumentpickerviewcontroller中找不到任何方法或属性。

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

 NSFileCoordinator *coordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil];
    NSError *error = nil;

    [coordinator coordinateReadingItemAtURL:url options:0 error:&error byAccessor:^(NSURL *newURL) {

//assuming the file coordinator has downloaded the file here and provided the new url here
}

    }

1 个答案:

答案 0 :(得分:3)

将文件协调器配置为仅读取元数据而不是下载整个文件。从此URL我们使用方法getPromisedItemResourceValue获取云中文件的文件大小:forKey:NSURLFileSizeKey错误:

请发布任何比这种方式更有效的答案。这是适合我的解决方案

- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url {
     NSError *error = nil;
    NSFileCoordinator *coordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil];

     [coordinator coordinateReadingItemAtURL:url options:NSFileCoordinatorReadingImmediatelyAvailableMetadataOnly error:&error byAccessor:^(NSURL *newURL) {

         NSError *err = nil;

         NSNumber * fileSize;
         if(![url getPromisedItemResourceValue:&fileSize forKey:NSURLFileSizeKey error:&err]) {
             NSLog(@"Failed error: %@", error);
             return ;
         } else {
          NSLog(@"fileSize %f",fileSize.doubleValue);
}
}
}