写代码 我不习惯把Controller里面的代码量搞太大 一般是通过自定制几个view 写几个网络请求类 来尽量减少Controller的代码
网络请求时 把得到的数据通过代理传递到Controller 这样整个界面看起来清爽
网络请求 除了自定制 我一般习惯用这两个传统方法
- (void)loginAccount:(NSString *)loginAccount Withparameters:(NSDictionary *)parameters
{
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];//如果报接受类型不一致请替换一致text/html或别的
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
// 设置超时时间
[manager.requestSerializer willChangeValueForKey:@"timeoutInterval"];
manager.requestSerializer.timeoutInterval = 5.f;
[manager.requestSerializer didChangeValueForKey:@"timeoutInterval"];
[manager POST:SERVERURL parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
id responseObj = [self parseJson:responseObject];
if ([responseObj isKindOfClass:[NSDictionary class]]) {
responseObj = (NSDictionary *)responseObj;
}
NSString *code = [responseObj objectForKey:@"code"];
UserInformation *userInfo;
if (![code isEqualToString:@"100"]) { //如果不是登录成功。显示错误描述
[[[UIAlertView alloc] initWithTitle:Nil message:[self stringFromCode:code] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] show];
}else {
NSLog(@"%@", [responseObj objectForKey:@"data"]);
userInfo = [self parseData:responseObj]; //登录时服务器返回的数据
}
if (self.delegate && [self.delegate respondsToSelector:@selector(loginSuccess:)]) {
[self.delegate loginSuccess:userInfo];
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error){
//登录失败 代理方法
if (self.delegate && [self.delegate respondsToSelector:@selector(loginFail:)]) {
[self.delegate loginFail:nil];
}
}];
// NSURL *url = [NSURL URLWithString:[NetworkRequestAddress getLoginURL]];
// NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
// [urlRequest setHTTPMethod: @"POST"];
//
// NSString *body = [NSString stringWithFormat:@"%@=%@", @"data", [parameters objectForKey:@"data"]];
//
// [urlRequest setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]];
//
// operation = [[AFHTTPRequestOperation alloc]initWithRequest:urlRequest];
//
// [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
//
// id responseObj = [self parseJson:responseObject];
// if ([responseObj isKindOfClass:[NSDictionary class]]) {
// responseObj = (NSDictionary *)responseObj;
//
// }
// NSString *code = [responseObj objectForKey:@"code"];
// UserInformation *userInfo;
// if (![code isEqualToString:@"100"]) { //如果不是登录成功。显示错误描述
// [[[UIAlertView alloc] initWithTitle:Nil message:[self stringFromCode:code] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] show];
//
// }else {
// NSLog(@"%@", [responseObj objectForKey:@"data"]);
// userInfo = [self parseData:responseObj];
// }
// //代理传值
// // A类传值给B类,A类定义协议,B类作为A类的代理并实现协议。
// // LoginNetworkManager 请求得到的返回值要传给 LoginViewController
// // LoginNetworkingManager定义协议方法(loginSuccess、loginFailed),LoginViewController实现LoginNetworkingManager的协议方法
//
//
// if (self.delegate && [self.delegate respondsToSelector:@selector(loginSuccess:)]) {
//
// [self.delegate loginSuccess:userInfo];
// }
//
// } failure:^(AFHTTPRequestOperation *operation, NSError *error){
//
// //登录失败 代理方法
// if (self.delegate && [self.delegate respondsToSelector:@selector(loginFail:)]) {
// [self.delegate loginFail:nil];
// }
// }];
// [operation start];
}
没注释的是方法1 注释了得时方法2
AFNetworking默认的请求时间好像是30s 太长了 用户等太久
下面的这个方法 是设置请求时间的
// 设置超时时间
[manager.requestSerializer willChangeValueForKey:@"timeoutInterval"];
manager.requestSerializer.timeoutInterval = 3.f;
[manager.requestSerializer didChangeValueForKey:@"timeoutInterval"];
靠谱 欢迎各位大神 赐教