1

ファイルをダウンロードして、これを実行できたプログレスバーを表示したいと思います

今、私はラベルに進行状況の値を表示し、このコードを使用して初期化を進行させ、ラベルを更新したいと思います:

[queue setDelegate:self];
[queue setRequestDidFinishSelector:@selector(updateLabel)];
[queue setDownloadProgressDelegate:progress];
[queue setShowAccurateProgress:YES];

ASIHTTPRequest *request;
request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];

[request setTemporaryFileDownloadPath:[filePath stringByAppendingString:@".download"]];
[request setAllowResumeForFileDownloads:YES];

[request setDidFinishSelector:@selector(updateLabel)];
[request setDidReceiveDataSelector:@selector(updateLabel)];

[request setShouldContinueWhenAppEntersBackground:YES];
[request setShouldAttemptPersistentConnection:NO]; 
[request setDownloadDestinationPath:filePath]; 
[queue addOperation:request];
[queue go];

ただし、宛先パスには保存しないでください。

そして私がこのコードをクリアすると: 

[request setDidReceiveDataSelector:@selector(updateLabel)];

保存完了!

問題は何ですか?

進捗値が変更されたときにラベルテキストを更新したい

4

1 に答える 1

0

これは、メインスレッドで行う必要があることです。アプリケーションの UI の更新は、バックグラウンド スレッドではなく、メイン スレッドによって実行されます。

または

あるいは、私のために働く以下のコードスニペットを使用することができます:

- (void)fetchThisURLFiveTimes:(NSURL *)url
{
   ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
   [request addOperation:request];
   [request cancelAllOperations];
   [request setDownloadProgressDelegate:myProgressIndicator];
   [request setDelegate:self];
   [request setRequestDidFinishSelector:@selector(queueComplete:)];

   [request go];
}

- (void)queueComplete:(ASINetworkQueue *)queue
{
   NSLog(@"Value: %f", [myProgressIndicator progress]);
   [self performSelectorOnMainThread:@selector(updateLabel) withObject:nil waitUntilDone:NO]; 
}
于 2012-10-08T09:35:52.693 に答える