Brennan
Brennan

Reputation: 11686

Why can't I save changes to application settings with NSUserDefaults?

I am using the following code to save values from a settings view that takes values from a UITextField and stores them with NSUserDefaults. The code below even calls synchronize yet it is not saving the changes. What am I doing wrong here?

- (IBAction)save {
    NSLog(@"save");

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    if (self.usernameTextField.text != nil) {
        NSLog(@"username: %@", self.usernameTextField.text);
        [defaults setObject:kTwitterUsernameKey forKey:self.usernameTextField.text];
    }
    if (self.passwordTextField.text != nil) {
        NSLog(@"password: %@", self.passwordTextField.text);
        [defaults setObject:kTwitterPasswordKey forKey:self.passwordTextField.text];
    }

    [defaults synchronize];

    [self dismissModalViewControllerAnimated:TRUE];
}

Upvotes: 0

Views: 657

Answers (2)

Iggy
Iggy

Reputation: 8669

You need to set your kTwitterUsernameKey like below

//Saving kTwitterUsernameKey
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:self.usernameTextField.text forKey:kTwitterUsernameKey];
//Retrieving kTwitterUsernameKey
NSString *myString = [defaults stringForKey:@"kTwitterUsernameKey"];

The general pattern for NSUserDefaults is like below

    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
// saving an NSString
[prefs setObject:@"TextToSave" forKey:@"keyToLookupString"];
// retrieve an NSString
NSString *myString = [prefs stringForKey:@"keyToLookupString"];

Upvotes: 0

MarkPowell
MarkPowell

Reputation: 16540

You are setting the key to the username and password, with the username/password string as the value.

So, you'll never be able to retrieve this data (unless you know the username and password already ;) )

if (self.usernameTextField.text != nil) {
    NSLog(@"username: %@", self.usernameTextField.text);
    [defaults setObject:self.usernameTextField.text forKey:kTwitterUsernameKey];
}

Try swapping as shown above.

Upvotes: 6

Related Questions