2016-06-25 3 views
0

저는 신속한 작업이 매우 쉽습니다. 도움이 필요해! 사용자가 두 번째로 로그인 할 때 앱이 직접 CoreView라는 다음보기 컨트롤러로 이동해야합니다. 세부 사항을 요구해서는 안되지만 작동하지 않는 이유를 모르겠습니다. 또한 앱이 출시 될 때마다 세부 정보를 묻습니다. 아래 코드를 확인하십시오. 어떤 종류의 오류도 발생하지 않습니다. 앱이 종료되거나 로그 아웃 될 때까지는 사용자가 직접 로그인 할 수 있어야합니다. NSUserDefaults에 대한 내 코드가 작동하지 않습니다.

func pref_write() 
{ 
    // To write the data to NSUserDefaults 

    let prefs = NSUserDefaults.standardUserDefaults() // make a reference 
    print("OTP:\(OTP)") 

    // Adding values. Creating objects in prefs 
    prefs.setObject(OTP, forKey: "OTP") 
    print("check_OTP:\(check_OTP)") 

    prefs.setObject(U_ID, forKey: "U_ID") 
    print("Check_U_ID:\(check_U_ID)") 
    prefs.synchronize() 
    self.performSegueWithIdentifier("ContinueToCoreView", sender: self) 

} 

그리고있는 viewDidLoad 기능에

:

override func viewDidLoad() 
{ 

    super.viewDidLoad() 
    //Read the data 
    self.performSegueWithIdentifier("ContinueToCoreView", sender: self) 
    pref_write() 
    let prefs = NSUserDefaults.standardUserDefaults() 
    check_OTP = prefs.objectForKey("OTP")! 
    check_U_ID = prefs.objectForKey("U_ID")! 
    prefs.objectForKey("U_ID") 
    print("prefs:\(prefs)") 
    prefs.synchronize() 

} 

감사합니다! , 전화 기본 자격 증명을 제공하여 로그인에 대한 API의 USER_ID 및 user_otp를 얻을 :

+1

당신은 응용 프로그램이 실행되는 동안 만 상태를 유지하려면 당신은 유지하고 싶지 않아 앱이 죽을 때의 상태. 따라서 'UserDefaults'에 상태를 저장할 필요가 없습니다. 어쨌든 'UserDefaults'에 일부 상태를 저장하면 저장된 값을 확인하고 값에 따라 결정해야합니다. 'UserDefaults'에 저장 한 값에 대한 코드 검사를 볼 수 없습니다. –

+0

첫째, 상태가 아닌 데이터를 저장하려고합니다. 내가 prefs에서 객체를 만들 때. 거기에 저장해야합니다. 그리고 내가 어떤 식 으로든 틀린다면 .. 제발 이것을 안내해주세요. 앱이 죽을 때까지 UserDefaults에 세부 정보를 저장하려고합니다. – Mili

+0

쓰기 메서드에서 올바른 방법으로 작성하고 있지만 viewDidLoad에서는 값을 읽는 중일 뿐이지 만 읽지 않기 전에 읽기 전에 쓰기 메서드를 호출하는 것이 좋습니다. 또한 당신은 항상 "ContinueToCoreView"segue를 발사하여 이해가되지 않습니다. 첫 번째보기 컨트롤러의 viewDidLoad입니까? –

답변

1

은 AppDelegate에에서

class User_Details : NSObject 
{ 
    var user_id : String? 
    var user_otp : String? 
    var otp_verified : Bool? 

    init(u_id:String, otp:String?, verified:Bool) 
    { 
     super.init() 
     self.user_id = u_id 
     self.otp_verified = verified 
     self.user_otp = otp 
    } 
} 

같은 클래스를 만듭니다

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
{ 
    navController = self.window?.rootViewController as? UINavigationController 
    if self.checkIfUserLoggedIn() 
    { 
     let user_details = NSUserDefaults.standardUserDefaults().objectForKey("user_details") as! User_Details 
     self.moveToNextScreen(user_details) 
    } 
    return true 
} 

//AppDelegate Class or in the class which is globally accessible 
func pref_write_user(user_details : User_Details) 
{ 
    let prefs = NSUserDefaults.standardUserDefaults() 
    prefs.setObject(user_details, forKey: "user_details") 
    prefs.setBool(true, forKey: "is_user_login") 

    //After saving the OTP for current user, check for otp verified, move to OTP Screen 
    self.moveToNextScreen(user_details) 
} 

func moveToNextScreen(user_details : User_Details) 
{ 
    if user_details.otp_verified == false 
    { 
     // Move to OTP screen 
     let viewController = self.navController?.storyboard?.instantiateViewControllerWithIdentifier("otpScreen") 
     self.navController?.pushViewController(viewController!, animated: false) 
    } 
    else // Move to Home Screen 
    { 
     let viewController = self.navController?.storyboard?.instantiateViewControllerWithIdentifier("homeScreen") 
     self.navController?.pushViewController(viewController!, animated: false) 
    } 
} 

func logoutUser() 
{ 
    let prefs = NSUserDefaults.standardUserDefaults() 
    prefs.setObject(nil, forKey: "user_details") 
    prefs.setBool(false, forKey: "is_user_login") 
} 

func checkIfUserLoggedIn() -> Bool 
{ 
    let prefs = NSUserDefaults.standardUserDefaults() 

    if prefs.boolForKey("is_user_login") 
    { 
     if let _ = prefs.objectForKey("user_details") 
     { 
      return true 
     } 
     else 
     { 
      //User details not found for some reason, so setting the inital values and return false 
      self.logoutUser() 
     } 
    } 

    return false 
} 

로그인 클래스 NSUserDefaults에 저장하십시오.

func requestLoginToServer() 
{ 
    //Perform basic server action 
    .... 
    //In Success Block write this 
    let appDel = UIApplication.sharedApplication().delegate as! AppDelegate 
    // pass the values as return by the server 
    let user_details = User_Details(u_id: "123", otp: "1234", verified: false) 
    appDel.pref_write_user(user_details) 
    appDel.moveToNextScreen(user_details) 
} 
+0

나는 이것에 아주 새롭다. 나는 당신이 말하는 것을 얻지 못하고 있습니다. 나는 당신의 코드를 trie합니다. 그러나 그것은 나에게 오류를 준다. 당신이 내 의심을 치울 수 없도록 당신의 연락처 ID 나 번호를 알려주십시오. 이 프로젝트는 나에게 매우 중요하며이를 제공 할 시간이 거의 없다. – Mili

1

이렇게 시도하십시오. 방금 코드를 재정렬했습니다.
먼저 초기보기 컨트롤러의 didload 메소드에서 로그인 자격 증명을 확인합니다. 존재하지 않으면 메소드 pref_write()을 호출합니다. pref_write() 메소드에 사용되는 값이 없습니다 있는지 확인하십시오 전무

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults() 
    // You can give conditions for your need like if(prefs.valueForKey("U_ID") != nil)) 
    // It will check the user defaults whether you already login 
    if(prefs.valueForKey("OTP") != nil) { 

      self.performSegueWithIdentifier("ContinueToCoreView", sender: self) 
    } 

    else{ 

     pref_write() 
    } 
} 


// Make sure the Values are not nil 

func pref_write() 
{ 
     // To write the data to NSUserDefaults 

     let prefs = NSUserDefaults.standardUserDefaults() // make a reference 
     print("OTP:\(OTP)") 

    // Adding values. Creating objects in prefs 
     prefs.setObject(OTP, forKey: "OTP") 
     print("check_OTP:\(check_OTP)") 

     prefs.setObject(U_ID, forKey: "U_ID") 
     print("Check_U_ID:\(check_U_ID)") 
     prefs.synchronize() 
     self.performSegueWithIdentifier("ContinueToCoreView", sender: self) 

} 

는 희망의 작업 ...

+0

감사합니다. @Paulson Varghese – Mili