iOS 开发笔记 - 登录 注册 (网上较少的 AFNetworking 3.0)

1,275 阅读3分钟

最近没更新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解析, 所以直接用返回值对应类型的值去接受就可以了.


重点一 : AFHTTPSessionManager, 是3.0之后用的新类, 取代了AFHTTPRequestOperationManager

重点二 : 这只是基础逻辑, 一些其他需要判断的东西根据实际情况来看

重点三 : responseObject 是返回的数据, 别对着task干使劲

重点四 : 返回值自带JSON解析, 不要用什么NSData去接收了