Как найти размер документа в iCloud, прежде чем выбрать его и загрузить на устройство с помощью UIDocumentPickerViewController
Как найти размер документа в 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 ответ
Настройте файловый координатор так, чтобы он просто считывал только метаданные, а не загружал весь файл. Из этого URL мы получаем размер файла файла в облаке, используя метод getPromisedItemResourceValue: forKey:NSURLFileSizeKey error:
Пожалуйста, опубликуйте любой ответ, который является более эффективным, чем этот способ. Это решение, которое сработало для меня
- (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);
}
}
}