我有一些数据在一个视图中使用NSUserDefaults存储,然后在另一个视图中显示。我遇到的问题是,当用户更改数据然后返回到显示数据的视图(在UILabel中)时,将显示首次保存的数据,而不是新保存的文本。
我想我可能需要对 viewDidAppear 做一些事情,这样每次显示视图时都会显示最新保存的数据。
这是我在UILabel上显示NSUserDefaults存储信息的代码:
NSString *aValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"myTextFieldKey"];
NSLog(@"Value from standardUserDefaults: %@", aValue);
NSLog(@"Label: %@", myLabel);
myLabel.text = aValue;
如果有人可以指出我的方向很好,
感谢
答案 0 :(得分:11)
将此文本放入
- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear: animated];
NSString *aValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"myTextFieldKey"];
NSLog(@"Value from standardUserDefaults: %@", aValue);
NSLog(@"Label: %@", myLabel);
myLabel.text = aValue;
}
在 - viewWillDisappear的“编辑”视图中:保存NSUserDefaults中的更改
答案 1 :(得分:3)
设置某个值时,请不要忘记使用synchronize
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:YOUR_VALUE forKey:@"KEY_NAME"];
[defaults synchronize];
现在,您可以将代码放在viewWillAppear
方法中以从默认值中检索值,这有助于您获取所需密钥的curreaved值。
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
NSString* strValue = [defaults objectForKey:@"KEY_NAME"];
myLabel.text = strValue != nil ? strValue : @"No Value";
希望有所帮助
答案 2 :(得分:3)
将数据保存到NSUserDefaults时,它不会立即写入持久存储。在NSUserDefaults中保存数据时,请确保调用:
[[NSUserDefaults standardUserDefaults] synchronize];
这样,保存的值将立即写入存储,随后从UserDefaults读取的每个值都将产生更新的值。
答案 3 :(得分:0)
在Swift中,我们可以按照以下方式进行:
为了节省价值:
let defaults = UserDefaults.standard
defaults.set(YOUR_VALUE, forKey: "YOUR_KEY_NAME")
获得价值:
let defaults = UserDefaults.standard
let data = defaults.objectForKey("YOUR_KEY_NAME")
欲了解更多详情,请访问: https://www.hackingwithswift.com/example-code/system/how-to-save-user-settings-using-userdefaults