iOS开发 - 第05篇 - 项目 - 04 - OAuth授权 & 首页

1、存储帐号信息


1.1 基本实现


由于一旦授权成功,新浪返回的accessToken是同一个值(针对同一个第三方应用,同一个账号),为避免每次都重新登录,应该讲accessToken存储起来。

实现:先检测沙盒里面是否存在accessToken,若无,则意味从来没有登陆过,加载登录界面,一旦成功登录,就将获得的accessToken存进沙盒,下次进来就不需要再进行登录,直接从沙盒中取出accessToken,进入首页,获取用户数据。

1>在发送请求,成功获取accessToken方法后,将返回的JSON(AFN自动解析成字典),字典保存到沙盒中




2>在程序运行的时候,根据是否存在上述保存的帐号信息,判断是否需要登录界面




3> 在手机开发中,授权成功后的回调地址一般是不需要的,需要拦截网络请求,在UIWebView代理方法中拦截,即在获取利用code获取accessToken方法之后,禁止加载回调地址




4>授权成功后,切换窗口根控制器为WBTabBarViewController或者新特性控制器(第一次登陆)




1.2 存在问题


1> 上述代码很多和appDelegate中的代码重复

2> 代码不严谨,还没有判断accessToken是否已经过期

3> 上述保存的帐号信息,均是直接对字典进行操作,需要通过key去取值,需要封装成模型


1.3 添加帐号模型


1> 根据access_token、expires_in、uid,添加帐号字典,并提供类方法,字典转模型

2> 将请求成功后返回的字典,转成模型,再存入沙盒




3>在程序运行时,判断沙盒中是否存在帐号信息,取出模型




4> 注:自定义对象需要存入沙盒、从沙盒中取出,需要遵循NSCoding协议!!!




5>在网络请求的时候添加蒙版MBProgressHUD




并且在请求成功/失败获取accessToken后隐藏。


2、封装帐号存储


专门对帐号模型的保存、获取进行封装,处理帐号相关业务

注:在帐号模型中添加获取accessToken的时间,用于判断以后accessToken是否过期






3、封装控制器切换


1.2节中已经指出,上述代码在授权成功切换控制器和程序运行切换控制器中的代码存在很多重复,需要将代码抽取出来,将切换控制器封装到UIWindow的分类当中。




注:使用的是对象方法,对UIWindow对象进行操作






4、首页 - 获得用户昵称




使用Foundation+Log,查看打印数据。

1:需要将昵称储存,在设置- (void)setupNav方法中,先取出沙盒中的昵称,再去发网络请求,看昵称是否改变,存储到HWAccount模型中

2HWAccount中的存储时间不应该放在HWAccountTool

+(void)saveAccount:(HWAccount *)account方法中,而应该放在字典转模型

+(instancetype)accountWithDict:(NSDictionary *)dict方法中

3encodeWithCoderinitWithCoder两个方法中也要写昵称属性


5、首页 - 封装标题按钮


5.1 使用imageEdgeInsets、 titleEdgeInsets说明


1:首页导航栏的titleView中文字和图片的间距,不能用UIEdgeInsetsMake固定死,因为用户的昵称会改变,文字的长度也会改变

2:什么情况下建议使用imageEdgeInsetstitleEdgeInsets

如果按钮内部的图片、文字固定,用这2个属性来设置间距,会比较简单

标题宽度(乘上scale系数,保证retina屏幕上的图片宽度是正确的)

CGFloattitleW = titleButton.titleLabel.width * [UIScreen mainScreen].scale;

CGFloatimageW = titleButton.imageView.width * [UIScreen mainScreen].scale;

CGFloatleft = titleW + imageW;

titleButton.imageEdgeInsets= UIEdgeInsetsMake(0, left, 0, 0);


5.2 自定义HWTitleButton




1:在这里只需要修改文字和图片的x即可!

2:下面的方法会引发死循环




此时在HWHomeViewController的setupNav方法中只需要这么做即可




6、加载微博数据






注:使用SDWebImage需要对内存警告做处理




7、微博数据 - 字典转模型


7.1 基本实现


1> HWUser






2> HWStatus






3>在HWHomeViewController中对网络返回的字典转换成模型数组,并在tableView代理方法中使用模型




4>在setupUserInfo方法中获取用户昵称也使用用户模型




7.2 MJExtension框架 --- 重要


问题:上述字典转模型的方法比较繁琐,而且又有模型嵌套。

解决方法:利用MJExtension框架(底层用runtime实现),可以快速实现字典/模型相互转换,还可以实现字典数组直接转模型数组等很多快捷功能!!!

1> 导入框架

2> 删除原先的字典转模型方法

3>修改如下




8、下拉刷新


UIRefreshControl– 下拉刷新控件






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值