2012-03-18 10 views
0

私はASINetworkQueueを使用して、特定のビューに表示される一連のイメージをダウンロードしています。UIProgressViewとASIHTTPRequestを使用したダウンロードの進捗状況の追跡

Miの問題は、要求を終了する前にビューを開いてすぐに閉じると、UIProgressViewを更新しようとするとしばらく時間がかかり、もう存在しないのでクラッシュします(EXC_BAD_ACCESS)。 (その見解は却下された)。私はビューをアンロードする前にデリゲートをnilに設定しようとしましたが、それは役に立ちません。

これは、キューを作成し、要求

- (void)doNetworkOperations 
{ 
    // Stop anything already in the queue before removing it 
    [[self networkQueue] cancelAllOperations]; 

    // Creating a new queue each time we use it means we don't have to worry about clearing delegates or resetting progress tracking 
    [self setNetworkQueue:[ASINetworkQueue queue]]; 
    [[self networkQueue] setDelegate:self]; 

    // if I have little files to download, use accurate progress 
    // if I have lots, it's not worth it. 
    if ([promosInfo count]<=4) { 
     [[self networkQueue] setShowAccurateProgress:YES]; 
    } 
    [[self networkQueue] setDownloadProgressDelegate:progressControl]; 
    [[self networkQueue] setRequestDidFinishSelector:@selector(requestFinished:)]; 
    [[self networkQueue] setRequestDidFailSelector:@selector(requestFailed:)]; 
    [[self networkQueue] setQueueDidFinishSelector:@selector(queueFinished:)]; 

    NSInteger i=0; 
    for (id row in promosInfo){ 
     NSURL *url = [NSURL URLWithString: [row objectForKey:@"imgSource"]]; 
     ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL: url]; 
     [request setTag:i]; 
     [[self networkQueue] addOperation:request]; 
     i++; 
     url = nil; 
     request = nil; 
    } 

    [[self networkQueue] go]; 
} 

を追加することを担当するコードの一部であり、私は、次のviewDidUnload

私は追跡を停止するASINetworkQueueに伝えるにはどうすればよい
- (void)viewDidUnload 
{ 
    [[self networkQueue] setDownloadProgressDelegate:nil]; 
    [[self networkQueue] cancelAllOperations]; 
    [self setNetworkQueue:nil]; 
    [self setCargando:nil]; 
    [self setScrollView:nil]; 
    [self setPageControl:nil]; 
    [self setStatusLabel:nil]; 
    [self setProgressControl:nil]; 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 

を持っています進捗?私が言及したように、私はデリゲートをゼロに設定しようとしましたが、うまくいかないようです。

私は、次のコードを実行され、プログレスバーの機能を実現している

答えて

0

.....

  1. 私はダウンロードしようとし、それぞれに異なる鍵たURLの値として、プログレスバーを保存していたクラスでその辞書をクラス名「シングルトン」に保存します。

    UIProgressView *_progressBar = [[UIProgressView alloc] init]; 
        ASIHTTPRequest *request; 
        request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:trimmedString]]; 
        [request setDelegate:self]; 
        [request setDownloadDestinationPath:filePath]; 
        [request setDownloadProgressDelegate:_progressBar]; 
        [request setShowAccurateProgress:YES]; 
        [request setShouldContinueWhenAppEntersBackground:YES]; 
        [request setDidFinishSelector:@selector(downloadedSuccessfully:)]; 
        [request setDidFailSelector:@selector(downloadedFailure:)]; 
        [[[MySingleton sharedSingleton ]getProgressValue] setValue:_progressBar forKey:trimmedString]; 
    

し、私は、プログレスバーを表示するつもりですビューコントローラでは、私は次のコードを書いた:それは、テーブル内のシングルトンクラスとショーから辞書から各セルのプログレスバーの値を読み取ります。完了したら、表示されません。なぜなら、値がゼロになるからです。しかし、このためにテーブルをリロードする必要があります。

UIProgressView *progressBar = (UIProgressView *)[[[MySingleton sharedSingleton] getProgressValue] valueForKey:[dictionary valueForKey:@"SongUrl"]]; 
    [progressBar setFrame:CGRectMake(215, 27, 40, 10)]; 
    [cell.contentView addSubview:progressBar]; 
0

このコードをviewDidUnloadに追加して、このコードが動作するかどうかを確認してください。私は最終的にそれがキャンセル要求を変更することで働かせた

for (ASIFormDataRequest *req in [networkQueue operations]) { 
    [req cancel]; 
    [req setDelegate:nil]; 
} 

[networkQueue reset]; 
[networkQueue cancelAllOperations]; 
[networkQueue setDelegate:nil]; 
+0

私は本当にあなたの解決策を実行しますが、まだUIProgressViewにアクセスしようとしていて、不正なアクセスを取得しようとしています。 – Daniel

+0

私は答えを編集しました、このコードをもう一度加えてみてください – Lunayo

-2

は、ゼロとのviewDidLoadからViewWillDissapearに類似するデリゲートを設定します(BOOL)アニメーション。

関連する問題