简体   繁体   English

NSUserDefaults - 存储和检索数据

[英]NSUserDefaults - storing and retrieving data

I have some data that's been stored using NSUserDefaults in one view and then being displayed in another view. 我有一些数据在一个视图中使用NSUserDefaults存储,然后在另一个视图中显示。 The issue I'm having is that when the user changes the data and then returns to the view where the data is displayed (in a UILabel), the data that was first saved is displayed instead of the newer saved text. 我遇到的问题是,当用户更改数据然后返回到显示数据的视图(在UILabel中)时,将显示首次保存的数据而不是新保存的文本。

I think I need to do something with viewDidAppear perhaps, so that every time the view appears the newest saved data is displayed. 我想我可能需要对viewDidAppear做一些事情,这样每次显示视图时都会显示最新保存的数据。

here's the code that Im displaying the NSUserDefaults stored info on a UILabel: 这是我在UILabel上显示NSUserDefaults存储信息的代码:

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

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

if someone could point me in the right direction that would be great, 如果有人可以指出我的方向很好,

thanks 谢谢

Put this text in 把这个文本放进去

- (void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear: animated];
    NSString *aValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"myTextFieldKey"];
    NSLog(@"Value from standardUserDefaults: %@", aValue);

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

And in your "edit" view in - viewWillDisappear: save changes in NSUserDefaults 在 - viewWillDisappear中的“编辑”视图中:保存NSUserDefaults中的更改

Do not forget the use synchronize when you set some value 设置某个值时,请不要忘记使用synchronize

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:YOUR_VALUE forKey:@"KEY_NAME"];
[defaults synchronize];

Now you can place your code in viewWillAppear method to retrieve the value from defaults, this will help you fetch the currentsaved value for your desired key. 现在,您可以将代码放在viewWillAppear方法中以从默认值中检索值,这将帮助您获取所需键的curreaved值。

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
NSString* strValue =    [defaults objectForKey:@"KEY_NAME"];
myLabel.text = strValue != nil ? strValue : @"No Value";

Hope it helps 希望能帮助到你

When saving data to NSUserDefaults, it doesnt immediately write to the Persistent Storage. 将数据保存到NSUserDefaults时,它不会立即写入持久存储。 When you save data in NSUserDefaults, make sure you call: 在NSUserDefaults中保存数据时,请确保调用:

[[NSUserDefaults standardUserDefaults] synchronize];

This way, the value(s) saved will immediately be written to Storage and each subsequent read from the UserDefaults will yield the updated value. 这样,保存的值将立即写入存储,随后从UserDefaults读取的每个值将产生更新的值。

In Swift we can do it following way: 在Swift中我们可以按照以下方式执行:

To save value: 为了节省价值:

 let defaults = UserDefaults.standard
 defaults.set(YOUR_VALUE, forKey: "YOUR_KEY_NAME")

To get value: 为了获得价值:

 let defaults = UserDefaults.standard
 let data = defaults.objectForKey("YOUR_KEY_NAME")

For more details visit: https://www.hackingwithswift.com/example-code/system/how-to-save-user-settings-using-userdefaults 有关详细信息,请访问: https//www.hackingwithswift.com/example-code/system/how-to-save-user-settings-using-userdefaults

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM