Search code examples
iosobjective-cxcode4.5

Remember me functionality using UISwitch and NSUserDefaults ios


I have a view controller which has text fields for username and password. Then below them I've a switch. If the switch is set to ON, then the login details of the user should be auto filled, when the user accesses the application after logging out. Here's my code for the switch:

-(IBAction)rememberUser:(id)sender
{
    if(rememberMe.on == YES)
    {
    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    NSString* textField1Text = mUserName.text;
    [defaults setObject:textField1Text forKey:@"textField1Text"];

    NSString *textField2Text = mPassword.text;
    [defaults setObject:textField2Text forKey:@"textField2Text"];
    }

}

I've added this in viewDidLoad:

if(rememberMe.on == YES)
   {
    NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
    NSString *user = [def stringForKey:@"textField1Text"];

    NSString *pass = [def stringForKey:@"textField2Text"];

    mUserName.text = user;
    mPassword.text = pass;
   }

However, after logging out, the username and textfields are blank, even if the switch is on. I'm using both the UISwitch and NSUserDefaults for the first time, hence I'm not sure at what places I'm going wrong. Please help.


Solution

  • Make sure you synchronize after you setObject. Something like this:

    -(IBAction)rememberUser:(id)sender
    {
        if(rememberMe.on == YES)
        {
        NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
        NSString* textField1Text = mUserName.text;
        [defaults setObject:textField1Text forKey:@"textField1Text"];
    
        NSString *textField2Text = mPassword.text;
        [defaults setObject:textField2Text forKey:@"textField2Text"];
        [defaults synchronize];
        }
    
    }
    

    synchronize helps to store the data.. More on NSUserDefaults, read this: http://mobile.tutsplus.com/tutorials/iphone/nsuserdefaults_iphone-sdk/