我有一个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'更新到选项卡。任何见解都将不胜感激!