NSUserDefaults不起作用

时间:2013-01-29 14:52:50

标签: objective-c cocoa-touch

我的应用包含以下内容:

  1. 主要数据视图控件
  2. 设置视图控制器(设置有3个文本字段)
  3. 在(2).m中按下键时,使用以下代码:

    - (BOOL)textFieldShouldReturn:(UITextField *)textField {
    
        if(textField==_serverAddress){
    
            NSLog(@"new server adress %@", textField.text);
            [[NSUserDefaults standardUserDefaults] setObject:textField.text forKey:@"serverAddress"];
            [[NSUserDefaults standardUserDefaults] synchronize];
        }
        if(textField==_login){
            NSLog(@"new login %@", textField.text );
            [[NSUserDefaults standardUserDefaults] setObject:textField.text forKey:@"login"];
            [[NSUserDefaults standardUserDefaults] synchronize];
        }
    
        if(textField==_password)
    {
            NSLog(@"new password %@", textField.text);
            [[NSUserDefaults standardUserDefaults] setObject:textField.text forKey:@"password"];
            [[NSUserDefaults standardUserDefaults] synchronize];
        }
    
        [textField resignFirstResponder];
        return YES;
    }
    

    在viewDidLoad中,使用以下代码:

    - (void)viewDidLoad
    {
    
    
        // Get the stored data before the view loads
    
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSString *savedServerAddress = [defaults objectForKey:@"savedServerAddress"];
        NSString *savedLogin = [defaults objectForKey:@"savedLogin"];
        NSString *savedPassword = [defaults objectForKey:@"savedPassword"];
    
        // Update the UI elements with the saved data
        self.serverAddress.text = savedServerAddress;
        self.login.text = savedLogin;
        self.password.text = savedPassword;
        [super viewDidLoad];
        _serverAddress.delegate = self;
        _login.delegate = self;
        _password.delegate = self;
    
    }
    

    当我在(2)中将设置更改为新设置然后返回(1)然后返回(2)我看到纯文本字段,我做错了什么?

2 个答案:

答案 0 :(得分:2)

您有不同的密钥,用于存储和读取用户默认值。例如,服务器地址与密钥@"serverAddress"一起存储,但使用密钥@"savedServerAddress"读取。

您必须使用相同的密钥,否则读取用户默认值将始终返回nil

答案 1 :(得分:0)

[super viewDidLoad];的调用应该是viewDidLoad方法中的第一个语句。