IOS開發之記錄用戶登陸狀態


  上一篇博客中提到了用CoreData來進行數據的持久化,CoreData的配置和使用步驟還是挺復雜的。但熟悉CoreData的使用流程后,CoreData還是蠻好用的。今天要說的是如何記錄我們用戶的登陸狀態。例如微信,QQ等,在用戶登陸后,關閉應用在打開就直接登陸了。那么我們在App開發中如何記錄用戶的登陸狀態呢?之前在用PHP或者Java寫B/S結構的東西的時候,我們用Session來存儲用戶的登陸信息,Session是存在服務器上僅在一次回話中有效,如果要記錄用戶的登陸狀態,那么會用到一個叫Cookie的東西。Cookie和Session不同,Cookie是存在用戶本地的一個文件,Cookie中存的就是用戶的登陸信息,當用戶在此登陸時,自動從Cookie中讀取用戶的登陸信息。

  不扯Web的啦,在我們App開發中同樣也遇到這要的問題,如何記錄用戶的登陸狀態呢? 用我們的CoreData蠻? CoreData適合處理大量的數據,一般和TableView來結合起來使用,當然我們可以用CoreData來存儲用戶的登陸信息,但這不免有點大材小用,而且用起來也是比較復雜的。那么我們有其他更便捷的方法嗎?蘋果這么注重用戶體驗,當然有其他的方法了,就是NSUserDefault. NSUserDefault設置完值以后要進行同步

  NSUserDefault是蘋果提供給我們用來存儲用戶的登陸信息的一個類,當然是持久化的了,廢話不多說了。我們就模擬一個用戶登陸和注銷的demo來學習一下如何使用NSUserDefault來存儲用戶的登陸信息。

  1.首先我們得有一個登陸頁面對應的類為ViewController.h, 在登陸頁面有兩個TextField和一個Button用來接受用戶的輸入,在點擊Button中的回調的方法中,如果用戶登陸成功,則把用戶信息存入UserDefault中,然后以模態的方式來跳轉到主界面,首先我們要獲取UserDefault的單例,登陸頁面中的登陸按鈕回調的方法代碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
- (IBAction)tapLogin:(id)sender {
     
     //獲取用戶輸入的信息
     NSString *username = self.usernameTextField.text;
     NSString *password = self.passwordTextField.text;
     
     //對用戶信息的驗證
     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,代碼如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//判斷是否登陸,由登陸狀態判斷啟動頁面
//獲取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掉,同時用模態的方式來跳轉到登陸頁面,代碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- (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:^{
     }];

  下面的截圖是在storyboard中的截圖,運行出的效果和下面一樣,到此我們就可以實現記錄用戶的登陸狀態了

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM