2017-01-24 11 views
3

保留中のデータをサーバーにアップロードし、同じボタンをクリックしてサーバーデータベースからすべてのデータをダウンロードします。しかし、私はアップロード/ダウンロードの進行状況を示すプログレスバーを表示する方法を得ていません。私は "setDownloadTaskDidWriteDataBlock"を使ってみましたが、決して呼び出されません。 マイコード:iosのafnetworking 3.0で進行状況バーを表示するには?

-(void)asyncTask:(NSString *)strURL parameters:(NSDictionary *)dictParams success:(void (^)(NSDictionary *response))success failure:(void (^)(NSError *error))failure { 


NSLog(@"parameters passed to server through services=%@",dictParams); 

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
// [manager setResponseSerializer:[AFHTTPResponseSerializer serializer]]; 
manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
manager.responseSerializer = [AFJSONResponseSerializer serializer]; 
manager.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments]; 
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil]; 


[manager POST:strURL parameters:dictParams progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
    NSLog(@"inside requestPostUrl JSON: %@", responseObject); 

    if([responseObject isKindOfClass:[NSDictionary class]]) { 
     if(success) { 
      success(responseObject); 
     } 
    } 
    else { 
     NSDictionary *response = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil]; 
     if(success) { 
      success(response); 
     } 
    } 

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
    if(failure) { 
     failure(error); 
    } 

}]; 

//以下の方法は、私を助けてください

[manager setDownloadTaskDidWriteDataBlock:^(NSURLSession *session,NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite) { 

    CGFloat written = totalBytesWritten; 
    CGFloat total = totalBytesExpectedToWrite; 
    CGFloat percentageCompleted = written/total; 

    NSLog(@"percentage completed=%f",percentageCompleted); 


    dispatch_async(dispatch_get_main_queue(), ^{ 
     // here is what you want 


     // vc.progressBarView.progress = (CGFloat)totalBytesWritten/totalBytesExpectedToWrite; 
    }); 

    //Return the completed progress so we can display it somewhere else in app 
    // if(progressBlock){ 
    //  dispatch_async(dispatch_get_main_queue(), ^{ 
    //   progressBlock(percentageCompleted,remoteURLPath); 
    //  }); 

    // } 
}]; 

誰かをトリガーされることはありません! ありがとうございました!進捗状況にこれを変更するnilを::

+0

進行しようと自己 –

+0

@matloobHasnainを、迅速に対応していただきありがとうございます。進捗状況:自己がエラーをスローしています - 互換性のない型 'void(^ _Nullable)(NSProgress * _Nonnull _strong)のパラメータに' ViewController '* const _strong'を送信しています –

答えて

2

このコード

- (void)sycLocations:(NSString *)strURL parameters:(NSDictionary *)dictParams success:(void (^)(NSDictionary *responce))success failure:(void (^)(NSError *error))failure { 

    __weak typeof(self) vc = self; 

    NSLog(@"parameters passed to server through services=%@",dictParams); 

    manager = [AFHTTPSessionManager manager]; 
    // [manager setResponseSerializer:[AFHTTPResponseSerializer serializer]]; 
    manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
    manager.responseSerializer = [AFJSONResponseSerializer serializer]; 
    manager.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments]; 
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil]; 

    [manager POST:strURL parameters:dictParams progress:^(NSProgress * _Nonnull uploadProgress){ 

     [manager setDataTaskDidReceiveDataBlock:^(NSURLSession *session, 
                NSURLSessionDataTask *dataTask, 
                NSData *data) 
     { 
      if (dataTask.countOfBytesExpectedToReceive == NSURLSessionTransferSizeUnknown) 
       return; 
      NSUInteger code = [(NSHTTPURLResponse *)dataTask.response statusCode]; 

      NSLog(@"status from server=%lu",(unsigned long)code); 

      if (!(code> 199 && code < 400)) 
       return; 

      long long bytesReceived = [dataTask countOfBytesReceived]; 
      long long bytesTotal = [dataTask countOfBytesExpectedToReceive]; 

      dispatch_async(dispatch_get_main_queue(), ^{ 
       NSLog(@"show progress status :) ................"); 
       vc.progressBar.progress= (CGFloat)bytesReceived/bytesTotal; 

      }); 

     }]; 
    }success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 

     if([responseObject isKindOfClass:[NSDictionary class]]) { 
      if(success) { 
       success(responseObject); 
      } 
     } 
     else { 
      NSDictionary *response = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil]; 
      if(success) { 
       success(response); 
      } 
     } 

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
     if(failure) { 
      failure(error); 
     } 

    }]; 

} 
関連する問題