120941138报:IOS项目实战-登录解析(Http请求)

来源:互联网 发布:象棋路边残局知乎 编辑:程序博客网 时间:2024/06/05 00:38

离发 IOS项目实战-登录解析 这篇博客有差不多一周了。也看到有朋友评论要把doLogin的代码补上来,因为我也是新手,所以在学习中写博客,效率是慢了点,同样在写例子的时候也碰到很多问题。也就都一起记录下来,就不会在犯同样的错误了。

这里请求网络服务器会用到第三方的框架ASIHttpRequest,该框架在CFNetwork.framework上进行了封装,让我在开发网络应用的时候更加便捷,所以当然要先添加这个框架到项目中。

下载地址:http://www.oschina.net/p/asihttprequest

在下载的文件中,会用到下图中的类

添加到项目中后,第一个错误就出现了,因为是ARC的项目,把上面的类一贴到项目中就报了ARC的错误

第一步:修改ASI的类为  -fno-objc-arc 就可以解决ARC的错误问题

第二步:引入几个主要的framework

1、CFNetwork.framework

2、MobileCoreServices.framework

3、SystemConfiguration.framework

4、libz.1.2.5.dylib

这几个包是一定要引入的,不然Xcode也会报出异常的。

第三步:修改Header Search Paths 和 Other Linker Flags


所有设置都搞定了,就要想一想调用doLogin时都要做些什么了。

1、在用户点击登录时,先在本地验证账号、密码是否合法,减轻每次都去请求服务器照成的网络访问

2、登录错误后,给予用户正确的提示信息

3、登成功后,跳到需要显示给用户的首页面,并且在本地保存用户信息,以便下次登

直接贴代码吧,代码里面有详细的注释,因为没有远程服务器做测试,所以借用了 @红薯 大哥的OsChina做测试,@红薯大哥千万别生气哦。

view source
print?
01// 登陆
02- (void)doLogin
03{
04    boolisSwitch = true;
05    NSString *errorMessage = @"";
06    NSString *name = self.nameField.text;
07    NSString *pwd = self.pwdField.text;
08    // 验证用户不为nil且不为空的字符串
09    if(!name || [name isEqualToString:@""])
10    {
11        isSwitch =false;
12        errorMessage = @"账号不能为空";
13    }
14    // 验证密码不为nil且不为空的字符串
15    elseif(!pwd || [pwd isEqualToString:@""])
16    {
17        isSwitch =false;
18        errorMessage = @"密码不能为空";
19    }
20    // 如果isSwitch不为true,说明本地的验证没有通过
21    if(!isSwitch)
22    {
23        // show出alert提示用户
24        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@""message:errorMessage delegate:self cancelButtonTitle:@"确定"otherButtonTitles: nil];
25        [alertView show];
26    }else {
27        // 通过验证请求服务器
28        NSURL *url = [NSURL URLWithString:api_login_validate];
29        ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
30        [request setPostValue:name forKey:@"username"];
31        [request setPostValue:pwd forKey:@"pwd"];
32        [request setPostValue:@"1"forKey:@"keep_login"];
33        [request startSynchronous];
34          
35        NSError *error = [request error];
36          
37        if(!error) {
38            // 服务器返回数据,解析数据,成功跳转,失败提示用户
39            NSString *response = [request responseString];
40            NSLog(@"%@", response);
41        }
42  
43    }
44      
45}
关于返回类型的解析,OsChina返回的是XML文件,OsChina的客户端是用到TBXML这个来解析的。

如果服务器返回的Josn的话,可以通过SBJson或其它IOS的第三方Json框架来解析。

登录的业务处理,解析,保存Cookie等操作,可以写一个工具类来封装,因为在其它的模块可能会验证用户是否登录或取用户的信息等,因为是Demo,没有封装这些操作。

转载:开源中国 小小贝