2016-03-23 8 views
1

Есть ли способ получить расчетное время По требованию Ресурсы скачать?On Remand Resources - Расчетное время (и как показать оповещение в зависимости от хода загрузки)

Я бы хотел показать предупреждение, пока все они не будут загружены.

[alertDownload showCustom:self image:[UIImage imageNamed:@"icon.jpg"] 
           color:[UIColor blueColor] 
           title:@"Download..." 
           subTitle:@"Download in progress" 
           closeButtonTitle:nil 
           duration: ODR ETA]; 

Сейчас у меня есть

if (request1.progress.fractionCompleted < 1) { 
// code above 
} 

но предупреждение не будет автоматически исчезнет, ​​когда загрузка будет завершена, она будет смотреть на продолжительности в боевой готовности.

+0

Какой API вы используете для загрузки? Использует ли он HTTP, и если да, то есть «contentLength», указанный в ответе? – trojanfoe

+0

эй, я использую ресурсы по запросу https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/On_Demand_Resources_Guide/Managing.html#//apple_ref/doc/uid/TP40015083-CH4-SW1 – fabersky

+0

ОК, чтобы страница показывала код, который использует уведомление для отслеживания загрузки. Ты это пробовал? – trojanfoe

ответ

0

Итак, благодаря помощи @trojanfoe, я достиг этого.

В принципе, я не устанавливаю продолжительность предупреждения при создании предупреждения, но я обновляю его в зависимости от хода загрузки. Пока загрузка не закончится, я неоднократно устанавливаю продолжительность 20.0f. Затем, когда загрузка завершена, я устанавливаю продолжительность в 1.0f (так что предупреждение исчезнет через 1 секунду).

NSTimeInterval _alertDuration; 

- (void)viewDidLoad { 
[request1 conditionallyBeginAccessingResourcesWithCompletionHandler:^ 
              (BOOL resourcesAvailable) 
    { 
    if (resourcesAvailable) { 
    // use it 
    } else { 
     [request1 beginAccessingResourcesWithCompletionHandler:^ 
              (NSError * _Nullable error) 
    { 
      if (error == nil) { 
       [[NSOperationQueue mainQueue] addOperationWithBlock:^ { 
        [alertDownload showCustom:self image:[UIImage 
          imageNamed:@"icon.jpg"] 
          color:[UIColor blueColor] 
          title:@"Download..." 
          subTitle:@"Download in progress" 
          closeButtonTitle:nil 
          duration:_alertDuration]; 
        } 
       ]; 
      } else { 
      // handle error 
      } 
     }]; 
    } 
}]; 

.

- (void)observeValueForKeyPath:(nullable NSString *)keyPath 
       ofObject:(nullable id)object 
       change:(nullable NSDictionary *)change 
       context:(nullable void *)context { 
if((object == request1.progress) && [keyPath 
       isEqualToString:@"fractionCompleted"]) { 
    [[NSOperationQueue mainQueue] addOperationWithBlock:^ { 
    if(request1.progress.fractionCompleted == 1) { 
     _alertDuration = 1.0f; 
    } else { 
     _alertDuration = 20.0f; 
    } 
    }]; 
} 
} 
1

ОК, если вы можете получить полную сумму , и вы можете измерить время, то вы знаете, как долго вы ушли.

При запуске скачать, записать время начала в переменной экземпляра:

@interface MyClass() { 
    NSTimeInterval _downloadStartTime; 
} 

- (void)startDownload 
{ 
    ... 
    _downloadStartTime = [NSDate timeIntervalSinceReferenceDate]; 
    ... 
} 

, а затем в обработчике уведомлений, где вы получаете фракцию полный, использование:

double fractionComplete = 0.2; // For example 
if (fractionComplete > 0.0) {  // Avoid divide-by-zero 
    NSTimeInterval now = [NSDate timeIntervalSinceReferenceDate]; 
    NSTimeInterval elapsed = now - _downloadStartTime; 
    double timeLeft = (elapsedTime/fractionComplete) * (1.0 - fractionComplete); 
} 

Примечание: я не занимался отображением диалогового окна предупреждения, и я не думаю, что используемая вами логика будет работать (вы не хотите показывать новое предупреждение каждый раз, когда получаете обновление). Я избегаю всей этой области и концентрируюсь только на логике ETA.

+0

спасибо! попробуем сейчас! – fabersky

+0

@fabersky Примечание: произошла ошибка в моем первоначальном расчете 'Истекший'. – trojanfoe

+0

ok;) но один вопрос: я должен показать предупреждение и установить его продолжительность при загрузке, так как я могу узнать время, оставшееся до начала загрузки? – fabersky

 Смежные вопросы

  • Нет связанных вопросов^_^