NSUserDefaults - 存储和检索数据

时间:2011-09-26 10:18:55

标签: iphone objective-c ios nsuserdefaults

我有一些数据在一个视图中使用NSUserDefaults存储,然后在另一个视图中显示。我遇到的问题是,当用户更改数据然后返回到显示数据的视图(在UILabel中)时,将显示首次保存的数据,而不是新保存的文本。

我想我可能需要对 viewDidAppear 做一些事情,这样每次显示视图时都会显示最新保存的数据。

这是我在UILabel上显示NSUserDefaults存储信息的代码:

   NSString *aValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"myTextFieldKey"];
    NSLog(@"Value from standardUserDefaults: %@", aValue);

    NSLog(@"Label: %@", myLabel);
    myLabel.text = aValue;

如果有人可以指出我的方向很好,

感谢

4 个答案:

答案 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