为什么我的NSUserDefaults不在选项卡之间保存?

时间:2011-10-18 20:49:18

标签: xcode4 uitabbarcontroller nsuserdefaults objective-c++ viewdidload

我有一个Cocoa Objective C tab-bar应用程序,它使用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];
}

奇怪的是,如果我退出模拟器并再次启动它,则在上面的'viewdidload'函数中使用f的新值。似乎只有在应用程序打开并运行时,才能使用上面的第一个(IBAction)inputF方法使用选项卡中的上述'viewdidload'函数将'f'更新到选项卡。任何见解都将不胜感激!

0 个答案:

没有答案