0

私にとって最大のアプリで最後の問題を解決しようとしています。

ここに画像の説明を入力してください

このdownloadViewをスクリーンショットに示しています。ここでは、NSURLConnectionを介してWebサーバーからファイル/ドキュメントを非同期でダウンロードしています。

すべてのビューコンポーネント(ダウンロードボタン、progressBarView、abortButton)などが完全に機能します。

ダウンロードが開始されると、プログレスバーが増加し、接続をnilに設定し、データ長をゼロに設定することで、ダウンロードを完全に中止できます。

::私の挑戦的な問題はそれです::

ダウンロードがバックグラウンドで処理され、[戻る]ボタンをクリックしてfirstViewに戻り、次にこのdownloadViewに戻ると、ダウンロードにアクセスできなくなります。もう中止したり監視したりすることはできません。プログレスバーがゼロにリセットされます。ただし、progressBar.progressのNSLogを介してダウンロードが実行されていることを確認できます。

この問題は、ビューを保持してスレッドにアクセスし、「戻る」ボタンを押したときにdownladViewを存続させることに関係していると思います。

書きすぎて申し訳ありませんが、私はこの問題をうまく明確にしようとしています。

これが私がファイルをダウンロードする方法を示すための基本的なコードです。

-(IBAction)downloadButton:(id)sender{
urlLink= @"http://www.example.com/text.pdf";

NSURLRequest *request= [NSURLRequest requestWithURL:[NSURL URLWithString:urlLink] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];

connectionbook = [[NSURLConnection alloc] initWithRequest:request delegate:self];
}
// using the regular delegate connectino methods
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{}
4

1 に答える 1

2

主要な問題は、[戻る]ボタンを押すと、ビューコントローラオブジェクトのロックが解除され(またはそうする必要があります)、そのビューに再度アクセスすると、別のビューが最初から作成されることです。

したがって、いくつかのオプションがあります。強力な参照を維持するために戻るビューを用意してください。これにより、ここに表示されるビューの割り当てが実際に解除されることはありません。したがって、常に同じオブジェクトをプッシュします。viewWillAppearなどが常に呼び出されることに対処するには、いくつかの状態を維持する必要があります。

もう1つの解決策は、他の永続オブジェクトに接続を維持させ、ViewControllerが進行状況を表示して情報にアクセスできるようにすることです。

他の2つのコメント。あなたは「接続をnilに設定し、データ長をゼロに設定することでダウンロードを完全に中止できます」と言いますが、これは正しい方法ではありません。接続を停止したい場合は、[conn cancel]を送信し、次にconn.delegate --nilを送信してから、接続を解放できます。

于 2012-07-28T14:32:23.340 に答える