3

アップロード リクエストの UIProgressView のプログレス バーを更新しようとしていNSURLConnectionます。目標は、写真のアップロード中に進行状況バーを更新することです。何度か検索した後didSendBodyData、接続デリゲートの を使用して、次のように進行状況を確認することができました。

- (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite
{
    if([self.delegate respondsToSelector:@selector(progressView)])
    {
        self.delegate.progressView.progress = (totalBytesWritten / totalBytesExpectedToWrite) * 100.0;
    }
}

すべて正常に動作しますが、問題は、このメソッドが 1 回しか呼び出されないことです...そのため、バーは一瞬 0% のままになり、中間なしですぐに 100% になります。(iPhoneのiOS6開発者ツールを使用して)接続を低速エッジ接続に設定して、アップロードが速すぎるかどうかを判断しようとしましたが、いいえ、アップロードは0でしばらく時間がかかり、すぐに100%になり、メソッドは一度だけ呼び出されます...

任意のアイデアをお願いします? ありがとうございました !それを修正する方法がわかりません...

4

1 に答える 1

4

数値型に関する C チュートリアルを実際に読む必要があります。おそらく両方ともtotalBytesWritten整数totalBytesExpectedToWrite型であるため、それらを分割すると切り捨てられます。つまり、結果の小数部分がなくなります。結果が 100% でな​​い限り、整数部分は常に 0 であるため、これらの除算はすべてゼロになります。適切な結果を得るには、変数の 1 つまたは両方をfloatまたはにキャストしてみてください。double

また、UIProgressViewデフォルトでは 0 から 100 の間の値を受け入れませんが、0 から 1 の間の値を受け入れます。

self.delegate.progressView.progress = ((float)totalBytesWritten / totalBytesExpectedToWrite);

そしてそれはうまくいくはずです。

編集:問題は、アップロードしようとしていたデータが小さすぎて、小さなチャンクに分割する必要がないことでした。そのため、このメソッドを 1 回だけ呼び出す必要がありました。大量のデータを提供すると、分割してしか送信できないため、プログレス ハンドラのコールバックが複数回呼び出されます。

于 2012-10-17T20:10:26.843 に答える