最近沒更新iOS的了, 直接更新點實用的東西, 下次更新AFNetworking的封裝, 讓大家直接就用, 不至於那麼麻煩.
由於 AFNetworking 3.0拋棄了
AFURLConnectionOperation
AFHTTPRequestOperation
AFHTTPRequestOperationManager
這三種類, 由於很長時間沒用AFNetworking做登入註冊險些掉坑, 網上也淨是用這三種老的型別做登入註冊的方法, 所以更新一下筆記, 希望後來者看到這篇文章.
PS: 此文不談TextField Label的鋪設 直接上有關AFNetworking的新類和基本邏輯乾貨.
##一. 註冊
首先老規矩 先匯入AFNetworking的標頭檔案
#import <AFNetworking.h>
// 如果你是手動匯入的AFNetworking則是
// #import "AFNetworking.h"複製程式碼
現在一般都是手機號做使用者名稱註冊, 所以只用手機號註冊的情況
首先判斷你的手機號格式是否正確
- (BOOL)judgeMobileNumber:(NSString *)mobileNum{
// 正規表示式 判斷手機號是否符合條件
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];
}複製程式碼
然後判斷密碼長度是否合適
- (BOOL)judgePassword:(NSString *)password{
if ([password length] > 4 && [password length] < 12) {
return YES;
} else{
return NO;
}
}複製程式碼
準備工作都做好之後下面乾貨
AFHTTPSessionManager 這個類是3.0用的新類
這個是註冊按鈕的點選方法
- (void)clickRegisterBtn{
NSString *domainStr = @"你的介面";
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
NSMutableDictionary *parametersDic = [NSMutableDictionary dictionary];
//往字典裡面新增需要提交的引數
[parametersDic setObject:@"你的賬號" forKey:@"username"];
[parametersDic setObject:@"你的密碼" forKey:@"password"];
if ([self judgeMobileNumber:[parametersDic objectForKey:@"username"]] == YES && [self judgePassword:[parametersDic objectForKey:@"password"]]) {
// 涉及到使用者私密資訊用POST請求
[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 {
// 賬號密碼的格式錯誤則彈出提示框
// 初始化提示框;
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"" message:@"賬號或密碼格式錯誤" preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
// 點選按鈕的響應事件;
}]];
//彈出提示框;
[self presentViewController:alert animated:true completion:nil];
}
}複製程式碼
這樣你的註冊功能就基本邏輯就OK了
##二. 登入
首先依然要先匯入標頭檔案
#import <AFNetworking.h>複製程式碼
點選登入按鈕觸發
- (void)clickLoginBtn{
NSString *domainStr = @"後臺給你的介面";
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
NSMutableDictionary *parametersDic = [NSMutableDictionary dictionary];
//往字典裡面新增需要提交的引數
[parametersDic setObject:@"賬號" 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解析 後臺返回字典, 用字典接收
NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
[self presentViewController:[self tabBarControllerRoot] animated:YES completion:^{
// 跳轉到首頁
}];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"失敗");
}];
}複製程式碼
網上有的一些用NSData接收然後轉成JSON這種做法會報錯, 現在AFNetworking自帶JSON解析, 所以直接用返回值對應型別的值去接受就可以了.