无法设置NSUserDefaults字段

时间:2011-01-31 20:34:11

标签: iphone nsuserdefaults

我在我的应用初始化(第一次)中有以下代码:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *uid=@"1";
[defaults setObject:uid forKey:@"init_val"];
[defaults synchronize];

很久以后在代码中(响应按下按钮)我使用以下方法检查值:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *initVal=[defaults objectForKey:@"init_val"];

initVal始终为零。我已经检查过,init_val在我的设置包中设置与我可以设置和读取的另一个字段完全相同(它们都设置了一个名为“Key”的字段。

7 个答案:

答案 0 :(得分:5)

@ mlewis54:

您可以尝试使用此代码。我很确定它会对你有用。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *uid=@"1";
[defaults setObject:uid forKey:@"init_val"];
[defaults synchronize];

要检索数据,请使用以下代码:

NSString *initVal=[[NSUserDefaults standardUserDefaults] valueForKey:@"init_val"];

OR

NSString *initVal=[[NSUserDefaults standardUserDefaults] objectForKey:@"init_val"];

修改

如果仍然提供nil,则可以使用以下代码:

NSString *initVal=[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] valueForKey:@"init_val"]];

OR

NSString *initVal=[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"init_val"]];

希望这会对你有所帮助。

答案 1 :(得分:1)

您需要使用

NSString *initVal = [defaults stringForKey:@"init_val"];

- 因为它是一个String,你必须使用stringForKey。您可以类似地使用boolForKey来获取布尔值。

答案 2 :(得分:1)

在点击按钮的事件中将此事件降级...

NSUserDefaults *savedData = [NSUserDefaults standardUserDefaults];
[savedData setObject:userEmailTextField.text forKey:@"userid"];

并在加载时加载数据并检查您输入的值是否显示...

userEmailTextField.text =[[NSUserDefaults standardUserDefaults]objectForKey:@"userid"];

答案 3 :(得分:0)

您的代码没有任何问题,我试图在我的项目中复制它并且它运行良好, 所以你的错误可能是在你检查initVal ...

你用什么代码来看看initVal是否为零? 并且您确定在检查initVal的时间/位置,var / oblect仍然可见吗?

尝试在阅读代码后立即插入:

NSLog(@"____text read in pref: %@", initVal);

它在我的控制台窗口中写入 - > _ _text在pref:1

中读取

当然它是一个NSString,我希望你记住它当你检查它时不是int或NSNumber ...

卢卡

答案 4 :(得分:0)

您确定正确初始化NSUserDefaults吗?当我初始化时,在我的app委托中,我总是通过创建默认值的字典来创建默认用户默认值:

[[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults];

appDefaults是字典。然后你应该能够正确访问它们。

答案 5 :(得分:0)

可能是初始化没有发生。在那里放一个NSLog来检查它是否被执行。

答案 6 :(得分:0)

使用相同的代码对我工作正常:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *uid=@"1";
[defaults setObject:uid forKey:@"init_val"];
[defaults synchronize];

NSUserDefaults *defaultss = [NSUserDefaults standardUserDefaults];
NSString *initVal=[defaultss objectForKey:@"init_val"];
NSLog(@"Value of initVal: %@",initVal);

控制台上的O / P:initVal的值:1

因此尝试使用与控制台上的print相同的代码来执行此操作。