2013-03-27 2 views
0

Я читал о внедрении пользовательского отслеживания прогресса в моем приложении, используя ASIHTTPRequest в documentation. В нем упоминается реализация 2 метода, request:didReceiveBytes: и request:incrementDownloadSizeBy:. Я добавил их в контроллер просмотра, но они не вызываются. Я просто пытаюсь получить пример кода, работающего на этом этапе.ASIHTTPRequest Custom Progress Tracking

// ViewController.m 

- (void)fetchThisURLFiveTimes:(NSURL *)url 
{ 
    [myQueue cancelAllOperations]; 
    [myQueue setDownloadProgressDelegate:self]; 
    [myQueue setDelegate:self]; 
    [myQueue setRequestDidFinishSelector:@selector(queueComplete:)]; 
    int i; 
    for (i=0; i<5; i++) { 
     ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
     request.showAccurateProgress = YES; 
     [myQueue addOperation:request]; 
    } 
    myQueue.showAccurateProgress = YES; 
    [myQueue go]; 
} 

- (void)queueComplete:(ASINetworkQueue *)queue 
{ 
    NSLog(@"Value: %f", [myProgressIndicator progress]); 
} 

- (void)request:(ASIHTTPRequest *)request didReceiveBytes:(long long)bytes 
{ 
    NSLog(@"bytes: %lld", bytes); 
} 

- (void)request:(ASIHTTPRequest *)request incrementDownloadSizeBy:(long long)newLength 
{ 
    NSLog(@"newLength: %lld", newLength); 
} 

Что я здесь делаю неправильно?

+0

Я считаю, что ошибка возникает, потому что вы смешиваете делегатов очереди с ASIHTTPRequest! Методы, о которых вы упомянули, должны работать только с ASIHTTPRequest! Проверьте этот раздел на странице поддержки ASI «Об ASINetworkQueues» – Mateus

+0

Вы говорите, что эти методы могут использоваться только с ASIHTTPRequest, а не с ASINetworkQueue? ASINetworkQueue содержит несколько объектов ASIHTTPRequest, поэтому я думаю, что он должен работать. –

ответ

1

Ничего себе. Поэтому, когда вы размещаете линию self.myQueue.showAccurateProgress = YES;, это действительно важно. Он должен быть добавлен до строки [self.myQueue addOperation:request];. Вот что сработало для меня.

- (void)fetchThisURLFiveTimes:(NSURL *)url 
{ 
    [self.myQueue cancelAllOperations];   
    [self setMyQueue:[ASINetworkQueue queue]]; 
    [self.myQueue setDownloadProgressDelegate:self]; 
    [self.myQueue setDelegate:self]; 
    [self.myQueue setQueueDidFinishSelector:@selector(queueFinished:)]; 
    self.myQueue.showAccurateProgress = YES; 

    int i; 
    for (i=0; i<5; i++) { 
     ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
     [self.myQueue addOperation:request]; 
    } 
    [self.myQueue go]; 
} 

- (void)queueFinished:(ASINetworkQueue *)queue 
{ 
    if ([self.myQueue requestsCount] == 0) { 
     [self setMyQueue:nil]; 
    } 
    NSLog(@"Queue finished"); 
} 

- (void)setProgress:(float)newProgress { 
    NSLog(@"progress: %f", newProgress); 
} 

Какая пустая трата 6 часов, чтобы понять это. Надеюсь, это спасет кого-то какое-то обострение.