IOS開發之記錄使用者登陸狀態,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的單例,登陸頁面中的登陸按鈕回調的方法代碼如下:
| 12345678910111213141516171819202122232425 |
- (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,代碼如下
| 123456789101112131415 |
//判斷是否登陸,由登陸狀態判斷啟動頁面//擷取UserDefaultNSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];NSString *name = [userDefault objectForKey:@"name"]; //擷取storyboardUIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]; //如果使用者未登陸則把根視圖控制器改變成登陸視圖控制器if (name == nil){ NSLog(@"%@",name); id view = [storyboard instantiateViewControllerWithIdentifier:@"LoginView"]; self.window.rootViewController = view;} |
3.經過上面的代碼我們就可以根據使用者登陸狀態來選擇載入的資訊,在登陸後的頁面中,我們添加一個按鈕,用來退出。在退出按鈕回調的方法中,我們需要把之前儲存的使用者資訊進行remove掉,同時用模態的方式來跳轉到登陸頁面,代碼如下:
| 123456789101112131415161718 |
- (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中的,運行出的效果和下面一樣,到此我們就可以實現記錄使用者的登陸狀態了
ios開發中怎記錄程式退出的時間
你所說的程式退出是退出進程還是按home鍵退到後台
如果是前者,還真沒有什麼招來記錄
如果是後者,在appdelegate裡有個代理方法applicationDidEnterBackground,當按home後,該方法觸發
ios開發,怎儲存使用者名稱密碼
上傳伺服器儲存。。本地plist儲存。。Userdefault儲存。。sqlite儲存