简体   繁体   English

NSUserDefault不保存在模拟器中

[英]NSUserDefault not saving in simulator

No matter what I do, I cannot get my NSUserDefaults to save when using the iOS simulator. 无论我做什么,使用iOS模拟器时都无法保存NSUserDefaults。 I've read the posts, and I am calling synchronize , but it's still not working. 我已经阅读了帖子,并且正在调用synchronize ,但是仍然无法正常工作。

I have a button that simulates a check box. 我有一个模拟复选框的按钮。 When the button is clicked, the method toggleSavedPassword fires. 单击按钮后,将触发方法toggleSavedPassword Even after checking the box (ie setting "save_password" to true), when I come back into the app, the value is reset to false every time. 即使选中该复选框(即,将“ save_password”设置为true),当我再次进入应用程序时,该值也会每次重置为false。

What am I doing wrong? 我究竟做错了什么? Thanks! 谢谢!

This is my output every time I follow the sequence of launching the app and clicking the checkbox: 这是我每次按照启动应用程序并单击复选框的顺序输出的内容:

password NOT saved
user save password set to: true
password save set
user default didn't save

Here is the code: 这是代码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSUserDefaults *userDefaults = [[NSUserDefaults alloc] init];

    NSLog([self.userDefaults boolForKey:@"save_password"] ? @"password saved" : @"password NOT saved");

    // check the save password box based on user default settings
    if ([userDefaults boolForKey:@"save_password"]) {
        [self.savePasswordCheckBox setBackgroundImage:[UIImage imageNamed:@"checked_checkbox"] forState:UIControlStateNormal];
    }

}

- (IBAction)toggleSavePassword:(UIButton *)sender {

    self.savePassword = !self.savePassword;

    NSString *temp;
    if (self.savePassword) temp = @"true";
    else temp = @"false";
    NSLog(@"user save password set to: %@\n", temp);

    if (self.savePassword) {
        [self.savePasswordCheckBox setBackgroundImage:[UIImage imageNamed:@"checked_checkbox"] forState:UIControlStateNormal];

        [self.userDefaults setBool:YES forKey:@"save_password"];
        [[NSUserDefaults standardUserDefaults] synchronize];

        NSLog(@"password save set");

    } else {
        [self.savePasswordCheckBox setBackgroundImage:[UIImage imageNamed:@"unchecked_checkbox"] forState:UIControlStateNormal];

        [self.userDefaults setBool:NO forKey:@"save_password"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }

    NSLog([self.userDefaults boolForKey:@"save_password"] ? @"Confirmed" : @"user default didn't save");

}

No need to add the NSUserDefaults as a property. 无需添加NSUserDefaults作为属性。

You could just use 你可以用

[NSUserDefaults standardUserDefaults];

For saving: 为了保存:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"save_password"];

For retrieving: 检索:

[[NSUserDefaults standardUserDefaults] boolForKey:@"save_password"];

您的self.userDefaults -setter方法BTW在哪里,应该是NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

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

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