如何記錄用戶的登陸狀態(tài)呢? 用我們的CoreData蠻浸锨? CoreData適合處理大量的數(shù)據(jù)唇聘,一般和TableView來結(jié)合起來使用,當然我們可以用CoreData來存儲用戶的登陸信息柱搜,但這不免有點大材小用迟郎,而且用起來也是比較復(fù)雜的。那么我們有其他更便捷的方法嗎冯凹?蘋果這么注重用戶體驗谎亩,當然有其他的方法了,就是NSUserDefault. NSUserDefault設(shè)置完值以后要進行同步
NSUserDefault是蘋果提供給我們用來存儲用戶的登陸信息的一個類宇姚,當然是持久化的了匈庭,廢話不多說了。我們就模擬一個用戶登陸和注銷的demo來學習一下如何使用NSUserDefault來存儲用戶的登陸信息浑劳。
1.首先我們得有一個登陸頁面對應(yīng)的類為ViewController.h, 在登陸頁面有兩個TextField和一個Button用來接受用戶的輸入阱持,在點擊Button中的回調(diào)的方法中,如果用戶登陸成功魔熏,則把用戶信息存入UserDefault中衷咽,然后以模態(tài)的方式來跳轉(zhuǎn)到主界面,首先我們要獲取UserDefault的單例蒜绽,登陸頁面中的登陸按鈕回調(diào)的方法代碼如下:
- (IBAction)tapLogin:(id)sender {
//獲取用戶輸入的信息
NSString*username =self.usernameTextField.text;
NSString*password =self.passwordTextField.text;
//對用戶信息的驗證
if([usernameisEqualToString:password]){
//獲取userDefault單例
NSUserDefaults*userDefaults = [NSUserDefaultsstandardUserDefaults];
//登陸成功后把用戶名和密碼存儲到UserDefault
[userDefaultssetObject:usernameforKey:@"name"];[userDefaultssetObject:passwordforKey:@"password"];[userDefaultssynchronize];
//用模態(tài)跳轉(zhuǎn)到主界面
UIStoryboard*storyboard = [UIStoryboardstoryboardWithName:@"Main"bundle:[NSBundlemainBundle]];
idmainViewController = [storyboardinstantiateViewControllerWithIdentifier:@"MainView"];[selfpresentViewController:mainViewControlleranimated:YEScompletion:^{
}];
}
}
?
2.處理完登陸頁面镶骗,我們會處理根據(jù)UserDefault中的name屬性是否有值來選擇加載哪個頁面。在storybaord中我們默認的是主界面躲雅,在AppDelegate.m中如果未登陸鼎姊,我們會設(shè)置一下rootViewController,代碼如下
//判斷是否登陸,由登陸狀態(tài)判斷啟動頁面//獲取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.經(jīng)過上面的代碼我們就可以根據(jù)用戶登陸狀態(tài)來選擇加載的信息相赁,在登陸后的頁面中相寇,我們添加一個按鈕,用來退出钮科。在退出按鈕回調(diào)的方法中唤衫,我們需要把之前保存的用戶信息進行remove掉,同時用模態(tài)的方式來跳轉(zhuǎn)到登陸頁面绵脯,代碼如下:
- (IBAction)tapLoginOut:(id)sender {
//獲取UserDefaults單例
NSUserDefaults*userDefaults = [NSUserDefaultsstandardUserDefaults];
//移除UserDefaults中存儲的用戶信息
[userDefaultsremoveObjectForKey:@"name"];
[userDefaultsremoveObjectForKey:@"password"];[userDefaultssynchronize];
//獲取storyboard
UIStoryboard*storyboard = [UIStoryboardstoryboardWithName:@"Main"bundle:[NSBundlemainBundle]];
//獲取注銷后要跳轉(zhuǎn)的頁面
idview = [storyboardinstantiateViewControllerWithIdentifier:@"LoginView"];//模態(tài)展示出登陸頁面
[selfpresentViewController:viewanimated:YEScompletion:^{}];
}
?
下面的截圖是在storyboard中的截圖佳励,運行出的效果和下面一樣休里,到此我們就可以實現(xiàn)記錄用戶的登陸狀態(tài)了