0

UIProgressView、NSURLConnection、NSOperation、および NSOperationQueue を連携させようとしています。コードは次のとおりです: http://pastie.org/4080576

問題: connection:DidReceiveData:呼び出されなかった: 実行はすぐにに進み、 を経由して-start()に戻り、(場合によっては) に戻り、最後に に進みます。-main()-connection:DidReceiveResponse:-main()-connectionDidFinishDownloading:destinationURL:

このリンクから画像をダウンロードしようとすると: http://upload.wikimedia.org/wikipedia/commons/4/41/Kharkov_picture_1787.jpg
この出力が得られます:

2012-06-13 19:43:06.189downloadFilesInOpQueue[5070:f803] 受信した応答: 2012-06-13 19:43:06.190downloadFilesInOpQueue[5070:f803] ファイルサイズ: 3075638 推奨ファイル名: Kharkov_picture_1787.jpg 2012-06- 13 19:43:12.476downloadFilesInOpQueue[5070:f803]ダウンロード完了。受信 0 バイト

connection:didReceiveResponse:また、 NSURLConnectionDelegate または NSURLConnectionDataDelegateのどこに属しているのかわかりません。

PS スタイルの問題があれば、喜んでお知らせします。どうも。

4

1 に答える 1

1

あなたの「ビジー」な while ループが、基礎となる実行ループの実行を消費し、データが到着したときに NSURLConnection を処理できなくなっているのではないかと強く疑っています。

あなたの pastie.org コードを見ると、主な原因は次のとおりです。

while (![self isFinished]) {
    ...
    while ([self fileSize] == 0) {}
    while ([self receivedDataLength] == 0) {}
    ...
}

このようなビジー ループは、iOS ではほとんど使用しないでください。iOS プログラミングは、主にイベント駆動型であり、特に NSURLConnection です。代わりに、などUIProgressViewに応じて更新してください。connection:DidReceiveData:

正直なところ、独自の NSURLConnection ハンドラをコーディングするのは面倒です。いくつかの問題を処理するオープンソース ライブラリの使用を検討することを強くお勧めします。ここにチェックアウトするための2つのまともなものがあります:

  1. https://github.com/AFNetworking/AFNetworking
  2. https://github.com/pokeb/asi-http-request
于 2012-06-13T19:16:25.597 に答える