1

NSURLSessionTask を使用して 2 つの画像 (一度に 1 つずつ) をアップロードしようとしています。

- (void)URLSession:(NSURLSession *)session
              task:(NSURLSessionTask *)task
   didSendBodyData:(int64_t)bytesSent
    totalBytesSent:(int64_t)totalBytesSent
totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend
{
if (self.imageName1 != nil && self.imageName2 != nil) 
    {
        float progress = (float)totalBytesSent / (float)totalBytesExpectedToSend;
        if (progress != 1.00)
        {
            // Calculate total bytes to be uploaded or the split the progress bar in 2 halves
        }
    }
    else if (self.imageName1 != nil && self.imageName2 == nil)
    {
        float progress = (float)totalBytesSent / (float)totalBytesExpectedToSend;
        if (progress != 1.00)
        [self.progressBar1 setProgress:progress animated:YES];
    }
    else if (self.imageName2 != nil && self.imageName1 == nil)
    {
        float progress = (float)totalBytesSent / (float)totalBytesExpectedToSend;
        if (progress != 1.00)
        [self.progressBar2 setProgress:progress animated:YES];  
    }
}

2 つの画像のアップロードの場合、単一の進行状況バーを使用して進行状況を表示するにはどうすればよいですか?

4

1 に答える 1

1

最良の方法は、子更新を 1 つNSProgressにロールアップできる whichを使用することです。NSProgress

  1. したがって、親を定義しますNSProgress

    @property (nonatomic, strong) NSProgress *parentProgress;
    
  2. を作成し、に監視するようにNSProgress指示します。NSProgressView

    self.parentProgress = [NSProgress progressWithTotalUnitCount:2];
    self.parentProgressView.observedProgress = self.parentProgress;
    

    を使用observedProgressするとNSProgressViewNSProgressが更新されると、対応NSProgressViewする も自動的に更新されます。

  3. 次に、個々のリクエストに対して、NSProgress更新される個々の子エントリを作成します。次に例を示します。

    self.child1Progress = [NSProgress progressWithTotalUnitCount:totalBytes1 parent:self.parentProgress pendingUnitCount:1];
    

    self.child2Progress = [NSProgress progressWithTotalUnitCount:totalBytes2 parent:self.parentProgress pendingUnitCount:1];
    
  4. NSProgress次に、個々のネットワーク リクエストが進行するにつれて、これまでの合計バイト数でそれぞれを更新します。

    self.child1Progress.completedUnitCount = countBytesThusFar1;
    

completedUnitCount個々の子オブジェクトの を更新すると、親オブジェクトNSProgressの が自動的に更新されます。これを観察しているため、それに応じて進行状況ビューが更新されます。fractionCompletedNSProgress

totalUnitCount親の が子の の合計と等しいことを確認してpendingUnitCountください。

于 2016-04-14T07:33:49.900 に答える