2013-03-27 109 views
0

我已阅读关于在我的应用程序中使用ASIHTTPRequest在documentation中实现自定义进度跟踪。它提到实施2种方法,request:didReceiveBytes:request:incrementDownloadSizeBy:。我已经将这些添加到了我的视图控制器中,但它们没有被调用。我只是试图让示例代码在这一点上工作。ASIHTTPRequest自定义进度跟踪

// 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 2013-03-27 22:03:00

+0

你是说这些方法只能用于ASIHTTPRequest而不是ASINetworkQueue? ASINetworkQueue包含多个ASIHTTPRequest对象,所以我认为它应该可以工作。 – 2013-03-28 14:38:11

回答

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个小时。我希望这可以帮助人们减轻某些恶化。