Dee*_*h M 5 objective-c ios progress-bar afnetworking-3
我想将待处理数据上传到服务器,然后在同一按钮点击下载服务器数据库中的所有数据.但是我没有得到如何显示进度条显示上传/下载的进度.我尝试使用"setDownloadTaskDidWriteDataBlock"但它永远不会被调用.我的代码:
-(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);
}
}];
Run Code Online (Sandbox Code Playgroud)
//永远不会触发以下方法
[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);
// });
// }
}];
Run Code Online (Sandbox Code Playgroud)
有人请帮帮我!谢谢!
试试这个代码
- (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);
}
}];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
922 次 |
| 最近记录: |