NSUserDefault是苹果提供给我们用来存储用户的登陆信息的持久化类。下面用实例看下记录登陆状态的过程
首先创建用于存取用户信息的方法类
HRAccountTool.h:
#import <Foundation/Foundation.h>
@interface HRAccountTool : NSObject
/**
* 存储账号信息
* @param account 需要存储的账号信息:第一个值为用户名;第二个值为密码
*/
+ (void)saveAccount:(NSArray *)account;
/**
* 返回存储的账号信息
* @return NSArray
*/
+ (NSArray *)getAccount;
/**
* 返回存储的登陆用户名
* @return NSString
*/
+ (NSString *)getUserName;
/**
* 返回存储的登陆用户密码
* @return NSString
*/
+ (NSString *)getPassword;
@end
实现类
HRAccountTool.m:
<pre name="code" class="objc">#import "HRAccountTool.h"
@implementation HRAccountTool
+ (void)saveAccount:(NSArray *)account{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
//保存数据 用户信息;用户名;用户密码
[userDefaults setObject:account forKey:@"account" ];
[userDefaults setObject:[account objectAtIndex:0] forKey:@"userName" ];
[userDefaults setObject:[account objectAtIndex:1] forKey:@"passWord" ];
};
+ (NSArray *)getAccount{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSArray *array = [userDefaults objectForKey:@"account"];
return array;
};
+ (NSString *)getUserName{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *userName = [userDefaults objectForKey:@"userName"];
return userName;
};
+ (NSString *)getPassword{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *passWord = [userDefaults objectForKey:@"passWord"];
return passWord;
}
@end
在 AppDelegate.m的页面跳转方法中,可以调用获取用户信息/用户名的方法来判断是否需要登陆。不需要则直接进入主页,需要则进入登陆页:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
// 先判断有无存储账号信息
if ([HRAccountTool getUserName] == nil) { // 之前没有登录成功
self.window.rootViewController = [[HRLoginViewController alloc] init];
} else {// 之前登录成功
// self.window.rootViewController = [[IWOAuthViewController alloc] init];
}
[self.window makeKeyAndVisible];
return YES;
}
如进入登陆页 在登陆事件中 持久化登陆用户信息到 NSUserDefault中,即可保证下次免登陆:
- (void) loginCheck{
// 1.创建请求管理对象
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
// 说明服务器返回的JSON数据
mgr.responseSerializer = [AFJSONResponseSerializer serializer];
// 2.封装请求参数
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"userName"] = userNameTF.text;
params[@"passWord"] = passWordTF.text;
// 3.发送请求
[mgr GET:@"http://localhost:8080/login/check.do" parameters:params
success:^(AFHTTPRequestOperation *operation, NSDictionary *responseObject) {
if ([[responseObject objectForKey:@"success"] boolValue] == true) {
self.view.window.rootViewController = [[ZYTabBarViewController alloc]init];
NSArray *array = [NSArray arrayWithObjects:userNameTF.text, passWordTF.text, nil ];
[HRAccountTool saveAccount:array];
}else{
self.view.window.rootViewController = [[ZYloginViewController alloc]init];
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
HRLog(@"请求失败:%@", error);
}];
}