2017-09-14 148 views
0

我正在爲我的應用程序做介紹,在swift 4中,但我遇到了一個問題。我有一個introController和HomeController視圖,根視圖是introController,所以我想如果用戶從introControll登錄到HomeController,然後每當用戶打開應用程序,第一個視圖出現HomController,(他們不需要再次登錄)。如何使UserDefaults保存登錄狀態?

我想到userDefaults裏面的商店登錄狀態,我不想讓我的應用程序使用導航,任何想法?請幫助

在此先感謝

+3

之前,您可以只保存在userDefaults一個布爾變量和每個他們打開應用程序時,檢查該變量是否爲真。如果它是真的,請將用戶移動到家庭控制器 – Martheli

回答

0

當您登錄保存任何布爾值,像這樣:

UserDefaults.standard.set("1", forKey: "isLogin") 

在的appdelegate檢查登錄狀態是這樣的:

if UserDefaults.standard.value(forKey: "isLogin") != nil{ 
      //Navigate to homeviewcontroller 
}else{ 
      //Navigate to rootviewcontroller 
} 
+0

謝謝,但你可以在appdelegate中顯示一些細節代碼嗎? –

+1

這不是一個布爾,你用鑰匙「isLogin」保存一個字符串「1」 – Martheli

0

這很簡單

您需要在UserDefau中保存狀態LTS當用戶成功登錄這樣的:斯威夫特3,4]

/// call if user logged in 
func saveLoggedState() { 

    let def = UserDefaults.standard 
    def.set(true, forKey: "is_authenticated") // save true flag to UserDefaults 
    def.synchronize() 

} 

然後在AppDelegate中的didFinishLaunchingWithOptions還真

let def = UserDefaults.standard 
let is_authenticated = def.bool(forKey: "is_authenticated") // return false if not found or stored value 

if is_authenticated { 
    // user logged in 
    let homeController = HomeController() // create instance of HomeController or from Storyboard 

    window?.rootViewController = homeController // change rootViewController to HomeController 
    window?.makeKeyAndVisible() // show window 
} 
+0

didFinishLaunchingWithOptions只在應用程序的初始啓動過程中被調用,所以不會有任何用戶身份驗證,除非他們從托盤中刪除應用程序,然後重新啓動它。 – Martheli

+0

是啊我知道,所以當用戶登錄時,所以提問者需要調用saveLoggedState以便下一個應用程序運行,它直接打開HomeController ...我明白他的問題與下次運行 –

+0

原始問題只是說他希望它驗證用戶時用戶「打開應用程序」。所以可能只是從非活動狀態回來。 – Martheli