iOS项目实战-同学录-整体构架
同学录项目,实际上它不应该称之为项目。起先,它是我在上课时tableView章节的一次作业。秉着要做就要做好、要玩就要玩high的前提,索性就做足它。
所以,通讯录中加入了不少在真实生产当中会用到的元素。比如注册登陆、比如短信验证码、比如网络加载,etc。而这一切,都是无须花钱、无须服务器编程的。
构架
所谓构架,当然不是传统意义上的构架。这里只是东拼西凑的拿些SDK、开源库过来凑成一个项目。你可以在这里评论“负分、滚粗”,因为这里没有干货,有的只是最基本的“解决方案”。
根据功能点,这里流水清单一下:
短信验证码:
Mob短信验证码官网
使用了Mob的短信SDK,因为它免费,同时又无需编写后台API。直接拿来用,简单省事。
这里主要是用到了它的两个方法:
- [SMSSDK getVerificationCodeByMethod]验证码获取方法,这个方法是用来从服务器请求校验码。
- [SMSSDK commitVerificationCode]验证码校验方法,这个方法是将验证码和手机做匹配,校验合法性的。
网络数据存储服务:
BMOB官网
使用了Bmob的云端数据库服务,当然它也提供了一套SDK来获取数据,但是这里并不建议使用。如果你把所有的事情都丢给SDK,那么你来做什么?(SMS验证码必须使用SDK,他们并没有提供RESTFul
的接口)
对于bmob的数据,rest涉及到的几点如下:
- 基本的get、post请求
- 自定义header请求头
- request、response json格式的数据
网络请求库
AFNetworking官网
这个库,基本上是github上的一个神话!star数目现在是2万+。做什么的,怎么用,不展开了。
这里用了它的post方法:[贴上我的烂代码如下:]
- (void)registerUser:(NSDictionary *) dict {
NSString *url = @"https://api.bmob.cn/1/users";
AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
[sessionManager.requestSerializer setValue:@"***" forHTTPHeaderField:@"X-Bmob-Application-Id"];
[sessionManager.requestSerializer setValue:@"***" forHTTPHeaderField:@"X-Bmob-REST-API-Key"];
[sessionManager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[sessionManager POST:url parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"%@", responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@", error);
}];
}
`</pre>
### JSON对象模型库YYModel
YYModel[YYModel](https://github.com/ibireme/YYModel)
MJ大婶的开源库,优秀的json、model互转框架。谁用谁知道!
<pre>`// UserModel.h 用户模型
#import <Foundation/Foundation.h>
@interface UserModel : NSObject
@property (nonatomic, strong) NSString *objectId;
@property (nonatomic, strong) NSString *username;
@property (nonatomic, strong) NSString *email;
@property (nonatomic, assign) NSInteger emailVerified;
@property (nonatomic, strong) NSString *mobilePhoneNumber;
@property (nonatomic, assign) NSInteger mobilePhoneNumberVerified;
@property (nonatomic, strong) NSString *updatedAt;
@property (nonatomic, strong) NSString *createdAt;
@end
`</pre>
<pre>`UserModel *user = [UserModel yy_modelWithJSON:responseObject];
`</pre>
使用起来就是这么简单!
### Progress 进度条 HUD
漂亮的等待、加载进度条KVNProgress[官网](https://github.com/kevin-hirsch/KVNProgress)
在网络请求等比较耗时的操作时,用这个比较赞!
### iOS抽屉视图
JVFloatingDrawer iOS Floating Drawer [官网](https://github.com/JVillella/JVFloatingDrawer)
看多了TabViewController?试试Android推崇的Drawer吧!
### 辅助工具
网络请求调试API [HTTPBin](https://Httpbin.org)
网络请求调试工具 Chrome + PostMan扩展
### 知识点
- MVC分层
- ViewController间传值
- 持久化储存数据 NSUserDefaults
- 网络请求(session)
- 基础界面构建
- 基础动画
- 抽屉导航
- 字符串MD5加密
`// MD5加密方法(使用类方法) + (NSString *)StringMD5:(NSString *)string { const char *cStr = [string UTF8String]; unsigned char result[CC_MD5_DIGEST_LENGTH]; CC_MD5(cStr, (int)strlen(cStr), result); NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++){ [output appendFormat:@"%02x",result[i]]; } return output; }
结束
大致构架就这样,日后将逐步展开。