简述:网络请求是大家都会遇到的问题,以及图片或者文字的上传,下面详细的讲解,帮助大家解决数据交互的问题,喜欢的最后记得点赞!
- 数据的交互无非两种:数据请求和数据上传
(1)用cocopods导入AFNetworking框架
pod 'AFNetworking', '~> 3.1.0'
再导入 AFNrequest 密码: bwqf
有时候打印出来的汉字无法直观的看到,那么我们就把它 转汉字,密码: ry2j导入,在工程里面运行一下就好了
(2)在项目里面导入下面的两个类
#import "AFNetworking.h"
#import "SXHTTPEngine.h"
在需要请求的地方输入
//这里放需要请求的接口:一般分页自己设置
NSString *url = http://192.168.80.254/jiekou/index.php?g=home&m=index&a=nearadlist"
//在子线程进行数据的请求
dispatch_async(dispatch_get_global_queue(0, 0), ^{
/*
网络数据的请求
*/
[[SXHTTPEngine shareManager]POST:url params:nil success:^(id responseObject) {
//NSLog(@"====%@",responseObject);对数据解析就好
/*
刷新主线程(刷表)
*/
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
} failure:^(NSError *error) {
NSLLog(@"加载失败");
}];
});
-
2.下面讲解数据的上传(在此先不讲解关于图片的上传,后面专门讲解)
上传数据的接口 NSString *url = [NSString stringWithFormat:@"%@/jiekou/index.php?g=home&m=index&a=jdorder",DFTurl]; AFHTTPSessionManager *manger = [AFHTTPSessionManager manager]; manger.responseSerializer = [AFHTTPResponseSerializer serializer]; manger.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]; //导航栏上的菊花(让状态栏显示网络等待的标志 [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; //这里放要上传的字段的内容 NSDictionary *parameter = @{@"userid":@"76"}; [manger POST:url parameters:parameter constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { //formData用来存放视频或者照片等等 } progress:^(NSProgress * _Nonnull uploadProgress) { } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"%@",responseObject); NSLog(@"上传成功"); 做一些上传成功后的跳转工作 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"%@",error); }];
3.下面讲解一下关于图片的上传,我们上传的图片可能不止一张,在此以数组的额形式上传
把上面的一段数据摘下来单独讲解图片的问题 //UploadArr是图片数组
[manager POST:str parameters:parameter constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
NSLog(@"数组里面的内容=%@",UploadArr);
NSLog(@"%ld--%@",UploadArr.count,UploadArr);
for (int i = 0; i < UploadArr.count; i++) {
// 时间转化字符串形式
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString *fileName = [NSString stringWithFormat:@"%@%d.png",[formatter stringFromDate:[NSDate date]],i];
NSLog(@"%@",UploadArr[i]);
/**
* 设置需要上传的文件
* UIImagePNGRepresentation(_iconView.image)-》将图片转成NSData
* 第一个参数是需要上传的文件
* 第二个是后台规定的参数名
* 第三个文件名,但是后台一般不用,所以意义不大
* 第四个文件类型
*/
[formData appendPartWithFileData:UIImagePNGRepresentation(UploadArr[i]) name:[NSString stringWithFormat:@"uploadFile%d",i] fileName:fileName mimeType:@"image/png"];
NSLog(@"%ld--%@",UploadArr.count,UploadArr);
}
简单的小demo 密码: jf95