2016-11-29 9 views
0

Как найти размер документа в iCloud перед его выбором и загрузкой на устройство с помощью UIDocumentPickerViewController. Я могу загрузить документ на устройство а затем преобразовать в NSData, я могу определить размер файла, но мы можем избежать загрузки самого документа и предопределить размер файла перед загрузкой. Я не смог найти какой-либо метод или свойство в uidocumentpickerviewcontroller.Как найти размер документа в iCloud перед его выбором и загрузкой на устройство с помощью 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 
} 

    } 

ответ

2

настроить координатор файл просто читать метаданные только вместо загрузки всего file.From этого адреса мы получаем размер файла файла в облаке с помощью метода 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); 
} 
} 
}