2017-09-14 3 views
0

나는 내 앱에 대해 소개를하고 있는데, 신속한 4 단계에서 문제가 발생했다. introController 및 HomeController보기가 있습니다. 루트보기는 introController이므로 사용자가 introControll에서 HomeController에 로그인 한 경우 사용자가 응용 프로그램을 열 때마다 첫 번째보기가 HomController 인 것처럼 보입니다 (다시 로그인 할 필요가 없습니다).UserDefaults를 로그인하여 저장 상태로 저장하는 방법은 무엇입니까?

나는 storeDriver 내에서 상점 로그인 상태에 대해 생각하고, 내 앱 사용을 원하지 않는다. 내비게이션, 어떤 아이디어?

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

AppDelegate에 체크 로그인 상태에서이 같은 :이 같은 모든 부울 값 저장 로그인 할 때 미리

+3

진정한 반환하기 전에 [4 스위프트 3] 각 그들이 앱을 열 때 변수가 true인지 확인하십시오. 그 사실이라면, 홈 컨트롤러 – Martheli

답변

0

감사를 도와주세요

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

감사합니다,하지만 사용자가 appdelegate 일부 세부 코드를 표시 할 수 있습니까? –

+1

은 bool이 아니며 "isLogin"키를 사용하여 문자열 "1"을 저장합니다 – Martheli

0

그것은 매우 간단을

상태를 UserDefau에 저장해야합니다. LTS 사용자가 성공적으로 같은에서 로그인 할 때 : 당신은 그냥 userDefaults에서 부울 변수를 저장할 수 didFinishLaunchingWithOptions에서 AppDelegate에있는 다음

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

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

} 

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