由于 AFNetworking 3.0拋棄了
AFURLConnectionOperation
AFHTTPRequestOperation
AFHTTPRequestOperationManager
這三種類, 由于很長(zhǎng)時(shí)間沒(méi)用AFNetworking做登錄注冊(cè)險(xiǎn)些掉坑, 網(wǎng)上也凈是用這三種老的類型做登錄注冊(cè)的方法, 所以更新一下筆記, 希望后來(lái)者看到這篇文章.
PS: 此文不談TextField Label的鋪設(shè) 直接上有關(guān)AFNetworking的新類和基本邏輯干貨.
一. 注冊(cè)
首先老規(guī)矩 先導(dǎo)入AFNetworking的頭文件
#import <AFNetworking.h>
// 如果你是手動(dòng)導(dǎo)入的AFNetworking則是
// #import "AFNetworking.h"
現(xiàn)在一般都是手機(jī)號(hào)做用戶名注冊(cè), 所以只用手機(jī)號(hào)注冊(cè)的情況
首先判斷你的手機(jī)號(hào)格式是否正確
- (BOOL)judgeMobileNumber:(NSString *)mobileNum{
// 正則表達(dá)式
NSString *mobileStr = @"^1(3[0-9]|4[57]|5[0-35-9]|7[01678]|8[0-9])\\d{8}$";
NSPredicate *judgeMobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];
return [judgeMobile evaluateWithObject:mobileNum];
}
然后判斷密碼長(zhǎng)度是否合適
- (BOOL)judgePassword:(NSString *)password{
if ([password length] > 4 && [password length] < 12) {
return YES;
} else{
return NO;
}
}
準(zhǔn)備工作都做好之后下面干貨
AFHTTPSessionManager 這個(gè)類是3.0用的新類
這個(gè)是注冊(cè)按鈕的點(diǎn)擊方法
- (void)clickRegisterBtn{
NSString *domainStr = @"你的接口";
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
NSMutableDictionary *parametersDic = [NSMutableDictionary dictionary];
//往字典里面添加需要提交的參數(shù)
[parametersDic setObject:@"你的賬號(hào)" forKey:@"username"];
[parametersDic setObject:@"你的密碼" forKey:@"password"];
if ([self judgeMobileNumber:[parametersDic objectForKey:@"username"]] == YES && [self judgePassword:[parametersDic objectForKey:@"password"]]) {
// 涉及到用戶私密信息用POST請(qǐng)求
[manager POST:domainStr parameters:parametersDic progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"成功");
// 成功則返回登錄界面
[self.navigationController popViewControllerAnimated:YES];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"失敗");
}];
} else {
// 賬號(hào)密碼的格式錯(cuò)誤則彈出提示框
// 初始化提示框;
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"" message:@"賬號(hào)或密碼格式錯(cuò)誤" preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
// 點(diǎn)擊按鈕的響應(yīng)事件脓杉;
}]];
//彈出提示框施掏;
[self presentViewController:alert animated:true completion:nil];
}
}
這樣你的注冊(cè)功能就基本邏輯就OK了
二. 登錄
首先依然要先導(dǎo)入頭文件
#import <AFNetworking.h>
點(diǎn)擊登錄按鈕觸發(fā)
- (void)clickLoginBtn{
NSString *domainStr = @"后臺(tái)給你的接口";
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
NSMutableDictionary *parametersDic = [NSMutableDictionary dictionary];
//往字典里面添加需要提交的參數(shù)
[parametersDic setObject:@"賬號(hào)" forKey:@"username"];
[parametersDic setObject:@"密碼" forKey:@"password"];
// 涉及到用戶隱私, 依然要用POST
[manager POST:domainStr parameters:parametersDic progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"成功");
// AFNetworking 自帶JSON解析 后臺(tái)返回字典, 用字典接收
NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
[self presentViewController:[self tabBarControllerRoot] animated:YES completion:^{
// 跳轉(zhuǎn)到首頁(yè)
}];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"失敗");
}];
}
網(wǎng)上有的一些用NSData接收然后轉(zhuǎn)成JSON這種做法會(huì)報(bào)錯(cuò), 現(xiàn)在AFNetworking自帶JSON解析, 所以直接用返回值對(duì)應(yīng)類型的值去接受就可以了.