各種介紹簡(jiǎn)單的API調(diào)用的書很多绍妨,但是對(duì)于日常開發(fā)經(jīng)常碰到的問(wèn)題很少有介紹。我這里摘錄翻譯了一些大家推薦的模式屯烦,比如常見的登錄窗口需求如下:
-第一次啟動(dòng)應(yīng)用程序時(shí)顯示登錄屏幕舔株。登錄后,轉(zhuǎn)到標(biāo)簽欄控制器的第一個(gè)選項(xiàng)卡饱岸。
-任何時(shí)候他們啟動(dòng)應(yīng)用程序掺出,檢查他們是否登錄,并直接跳到根Tab鍵控制器的第一個(gè)選項(xiàng)卡苫费。
-當(dāng)他們手動(dòng)點(diǎn)擊注銷按鈕時(shí)汤锨,顯示登錄屏幕,并從視圖控制器中清除所有數(shù)據(jù)百框。
在實(shí)現(xiàn)細(xì)節(jié)上:
-在需要的地方檢察登錄狀態(tài)闲礼,按需執(zhí)行注銷操作的通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(logoutAccount) name:@"logoutAccount" object:nil];
-在注銷時(shí),清除鑰匙串中的憑據(jù)铐维,然后執(zhí)行segue再次顯示登錄視圖控制器柬泽。
那么通用的流程是:
在appDelegate.m里面的didFinishLaunchingWithOptions
//用戶認(rèn)證: 檢查 NSUserDefaults User credential 是否存在,引導(dǎo)頁(yè)面跳轉(zhuǎn)
if (authenticatedUser)
{
self.window.rootViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateInitialViewController];
}
else
{
UIViewController* rootController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"LoginViewController"];
UINavigationController* navigation = [[UINavigationController alloc] initWithRootViewController:rootController];
self.window.rootViewController = navigation;
}
在SignUpViewController.m文件中
- (IBAction)actionSignup:(id)sender
{
AppDelegate *appDelegateTemp = [[UIApplication sharedApplication]delegate];
appDelegateTemp.window.rootViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateInitialViewController];
}
在文件MyTabThreeViewController.m
- (IBAction)actionLogout:(id)sender {
// 從 NSUserDefaults 和其他數(shù)據(jù)中刪除用戶
AppDelegate *appDelegateTemp = [[UIApplication sharedApplication]delegate];
UIViewController* rootController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"LoginViewController"];
UINavigationController* navigation = [[UINavigationController alloc] initWithRootViewController:rootController];
appDelegateTemp.window.rootViewController = navigation;
}