Защо не мога да запазя промените в настройките на приложението с NSUserDefaults?

Използвам следния код, за да запазя стойности от изглед на настройки, който взема стойности от UITextField и ги съхранява с NSUserDefaults. Кодът по-долу дори извиква синхронизиране, но не запазва промените. Какво правя грешно тук?

- (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];
}

person Brennan    schedule 19.03.2010    source източник
comment
Защо не използвате услугите на ключодържател за съхраняване на чувствителна информация? developer.apple.com/iphone/library/ документация/Сигурност/   -  person Georg Fritzsche    schedule 19.03.2010


Отговори (2)


Задавате ключа за потребителското име и паролата, като низът за потребителско име/парола е стойност.

Така че никога няма да можете да извлечете тези данни (освен ако вече не знаете потребителското име и паролата ;) )

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

Опитайте да размените, както е показано по-горе.

person MarkPowell    schedule 19.03.2010
comment
Не забравяйте да се обадите на [defaults synchronize], след като направите промени. - person Stefan Arentz; 19.03.2010
comment
Той го прави, така че показах само фрагмент от неговия кодов фрагмент. :) - person MarkPowell; 19.03.2010

Трябва да зададете вашия kTwitterUsernameKey както по-долу

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

Общият модел за NSUserDefaults е като по-долу

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