2013-03-27 104 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個小時。我希望這可以幫助人們減輕某些惡化。