Почему мои NSUserDefaults не сохраняются между вкладками? - PullRequest
0 голосов
/ 19 октября 2011

У меня есть приложение панели вкладок C для какао, которое использует NSUserDefaults для сохранения пользовательских настроек. На одной вкладке настраивается пользовательский интерфейс, где пользователь вводит текст в текстовое поле. Код выглядит так ...

- (IBAction) inputF:(id) sender {

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSLog(@"changing F to %f",[fInput.text doubleValue]);
[prefs setDouble:[fInput.text doubleValue] forKey:@"f"];
[prefs synchronize];
NSLog(@"New freq. from prefs %f",[prefs doubleForKey:@"f"] );  // keep it a float just     in case erroneous characters were entered
NSString *fString=[NSString stringWithFormat:@"%.2f",[prefs doubleForKey:@"f"]];
[fInput setText:fString];
[fInput resignFirstResponder];

}

Обратите внимание, что оператор NSLog подтверждает, что пользовательские настройки "f" действительно были изменены с использованием вышеуказанного метода.

Однако в другой вкладке старое значение «f» загружается следующим образом:

- (void)viewDidLoad
{
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

float f=[prefs doubleForKey:@"f"];
float c=[prefs doubleForKey:@"c"];


[wavelength setText:[NSString stringWithFormat:@"Wavelength = %.2f get units",f/c]];
[super viewDidLoad];
}

Как ни странно, если я выйду из симулятора и снова включу его, новое значение f используется в вышеупомянутой функции viewdidload. Похоже, что только когда приложение открыто и работает, «f» не может быть обновлено на вкладке с помощью вышеуказанной функции «viewdidload» из вкладки с использованием первого (IBAction) метода inputF, описанного выше. Любое понимание будет оценено!

...