0

私のアプリは次のもので構成されています。

  1. メイン データ ビュー コントロール
  2. 設定ビュー コントローラー (設定用の 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) に戻ると、プレーン テキスト フィールドが表示されますが、何が間違っていましたか?

4

2 に答える 2

2

ユーザーのデフォルトを保存および読み取るための異なるキーがあります。たとえば、サーバーアドレスはキーで保存されますが、キー@"serverAddress"で読み取られます@"savedServerAddress"

同じキーを使用する必要があります。そうしないと、ユーザーのデフォルトを読み取ると常に が返されnilます。

于 2013-01-29T15:01:29.330 に答える
0

への呼び出しは、メソッド[super viewDidLoad];の最初のステートメントである必要があります。viewDidLoad

于 2013-01-29T14:55:24.980 に答える