iOS实现登录状态处理

今天要说的是如何记录我们用户的登陆状态。例如微信,QQ等,在用户登陆后,关闭应用在打开就直接登陆了。那么我们在项目开发中如何记录用户的登陆状态呢?当然是使用NSUserDefault。

NSUserDefault是苹果提供给我们用来存储用户的登陆信息的一个类,当然是持久化的了,废话不多说了。我们就模拟一个用户登陆和注销的demo来学习一下如何使用NSUserDefault来存储用户的登陆信息。

1.首先我们得有一个登陆页面对应的类为ViewController.h, 在登陆页面有两个TextField和一个Button用来接受用户的输入,在点击Button中的回调的方法中,如果用户登陆成功,则把用户信息存入UserDefault中,然后以模态的方式来跳转到主界面,首先我们要获取UserDefault的单例,登陆页面中的登陆按钮回调的方法代码如下:

- (IBAction)tapLogin:(id)sender {
 
    //获取用户输入的信息
    NSString *username = self.usernameTextField.text;
    NSString *password = self.passwordTextField.text;
 
    //对用户信息的验证 只是为了验证登陆成功 即当username和password相同时代表登陆成功
    if ([username isEqualToString:password]){
        //获取userDefault单例
        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
 
        //登陆成功后把用户名和密码存储到UserDefault
        [userDefaults setObject:username forKey:@"name"];
        [userDefaults setObject:password forKey:@"password"];
         [userDefaults synchronize];
        //用模态跳转到主界面
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
 
        id mainViewController = [storyboard instantiateViewControllerWithIdentifier:@"MainView"];
 
        [self presentViewController:mainViewController animated:YES completion:^{
        }];
    }
 
}

2.处理完登陆页面,我们会处理根据UserDefault中的name属性是否有值来选择加载哪个页面。在storybaord中我们默认的是主界面,在AppDelegate.m中如果未登陆,我们会设置一下rootViewController,代码如下

//判断是否登陆,由登陆状态判断启动页面
//获取UserDefault
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
NSString *name = [userDefault objectForKey:@"name"];

//获取storyboard
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];

//如果用户未登陆则把根视图控制器改变成登陆视图控制器
if (name == nil)
{
NSLog(@"%@",name);
id view = [storyboard instantiateViewControllerWithIdentifier:@"LoginView"];
self.window.rootViewController = view;
}

3.经过上面的代码我们就可以根据用户登陆状态来选择加载的信息,在登陆后的页面中,我们添加一个按钮,用来退出。在退出按钮回调的方法中,我们需要把之前保存的用户信息进行remove掉,同时用模态的方式来跳转到登陆页面,代码如下:

- (IBAction)tapLoginOut:(id)sender {
 
    //获取UserDefaults单例
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
 
    //移除UserDefaults中存储的用户信息
    [userDefaults removeObjectForKey:@"name"];
    [userDefaults removeObjectForKey:@"password"];
     [userDefaults synchronize];
    //获取storyboard
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
 
    //获取注销后要跳转的页面
    id view = [storyboard instantiateViewControllerWithIdentifier:@"LoginView"];
 
    //模态展示出登陆页面
    [self presentViewController:view animated:YES completion:^{
    }];

你可能感兴趣的:(iOS实现登录状态处理)