1

我有一个视图控制器,其中包含用户名和密码的文本字段。然后在它们下面我有一个开关。如果开关设置为 ON,则在用户退出后访问应用程序时,应自动填写用户的登录详细信息。这是我的开关代码:

-(IBAction)rememberUser:(id)sender
{
    if(rememberMe.on == YES)
    {
    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    NSString* textField1Text = mUserName.text;
    [defaults setObject:textField1Text forKey:@"textField1Text"];

    NSString *textField2Text = mPassword.text;
    [defaults setObject:textField2Text forKey:@"textField2Text"];
    }

}

我在 viewDidLoad 中添加了这个:

if(rememberMe.on == YES)
   {
    NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
    NSString *user = [def stringForKey:@"textField1Text"];

    NSString *pass = [def stringForKey:@"textField2Text"];

    mUserName.text = user;
    mPassword.text = pass;
   }

但是,注销后,用户名和文本字段为空白,即使开关已打开。我是第一次同时使用 UISwitch 和 NSUserDefaults,因此我不确定我哪里出错了。请帮忙。

4

4 回答 4

2

确保在 setObject 之后进行同步。像这样的东西:

-(IBAction)rememberUser:(id)sender
{
    if(rememberMe.on == YES)
    {
    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    NSString* textField1Text = mUserName.text;
    [defaults setObject:textField1Text forKey:@"textField1Text"];

    NSString *textField2Text = mPassword.text;
    [defaults setObject:textField2Text forKey:@"textField2Text"];
    [defaults synchronize];
    }

}

同步有助于存储数据。有关 NSUserDefaults 的更多信息,请阅读:http: //mobile.tutsplus.com/tutorials/iphone/nsuserdefaults_iphone-sdk/

于 2013-05-24T07:47:05.767 回答
1

正如其他人所提到的,您不应该使用NSUserDefaults敏感信息,使用钥匙串服务。

UICKeyChainStore简化事情。

步骤:
1. 下载UICkeyChainStore
2. 将h/m文件(2)拖入项目
3. 在构建阶段添加安全框架
4. 在构建阶段添加UICKeyChainStore.m到编译源
5. 根据需要将头文件导入类

设置密码:

[UICKeyChainStore setString:self.passwordField.text forKey:@"Password"];

获取密码:

[UICKeyChainStore stringForKey:@"Password"];
于 2013-06-30T18:34:51.480 回答
0

你可以尝试添加

[defaults synchronize];

在 rememberUser: 方法中的 if 语句的末尾。将对象添加到用户默认值不会持久化您的数据,因此您必须使用synchronize方法立即执行此操作。

于 2013-05-24T07:45:23.883 回答
0

你忘记同步了。。

添加这一行

NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
[defaults setObject:textField2Text forKey:@"textField2Text"];
[defaults synchronize];
于 2013-05-24T09:26:02.210 回答