Iphone NSUserDefaults iOS字符串存储错误

Iphone NSUserDefaults iOS字符串存储错误,iphone,nsuserdefaults,Iphone,Nsuserdefaults,我试图将标签的值存储在NSUserDefault键prevmode中,但当它似乎没有存储时,以及在调试器Invalid CFStringRef中显示后尝试调用时 要存储的代码是 //Check for previous mode NSUserDefaults *defaults; NSString *prevmode; prevmode = passLength.text; [defaults setObject:prevmode forKey:@"prevmode"]; 恢复是一件很重要

我试图将标签的值存储在NSUserDefault键
prevmode
中,但当它似乎没有存储时,以及在调试器
Invalid CFStringRef
中显示后尝试调用时

要存储的代码是

//Check for previous mode 
NSUserDefaults *defaults;
NSString *prevmode;
prevmode = passLength.text;

[defaults setObject:prevmode forKey:@"prevmode"];
恢复是一件很重要的事

NSUserDefaults *defaults;

NSString *prevmode;

prevmode = [defaults objectForKey:@"prevmode"];

您应该使用
setValue:
并在设置为默认值后进行同步。检索时使用
valueForKey:

要保存:

[[NSUserDefaults standardUserDefaults] setValue:prevmode forKey:@"prevmode"];
[[NSUserDefaults standardUserDefaults] synchronize];
以及检索:

[[NSUserDefaults standardUserDefaults] valueForKey:@"prevmode"];

希望这有帮助。

您应该使用
设置值:
并在设置为默认值后进行同步。检索时使用
valueForKey:

要保存:

[[NSUserDefaults standardUserDefaults] setValue:prevmode forKey:@"prevmode"];
[[NSUserDefaults standardUserDefaults] synchronize];
以及检索:

[[NSUserDefaults standardUserDefaults] valueForKey:@"prevmode"];

希望这能有所帮助。

如上面的评论所述,我们需要一个指向NSUserDefaults实例的有效指针:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

如上所述,我们需要一个指向NSUserDefaults实例的有效指针:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];


键的对象很好,除了极少数情况外,不需要手动调用synchronise。@jrturton是对的,但我不反对,因为在这种情况下,
synchronize
是问题。
synchronize
不是问题。没有正确定义默认值是错误的。@H2CO3过度使用同步是错误的编程。由于此方法是定期自动调用的,因此仅当您无法等待自动同步(例如,如果您的应用程序即将退出)或即使未做任何更改也要将用户默认值更新为磁盘上的值时,才使用此方法。很好!我没有注意到。我甚至没有想到有人会犯这样一个愚蠢的小错误……键的对象很好,除了极少数情况外,不需要手动调用synchronise。@jrturton是对的,但我不反对,因为在这种情况下,
synchronize
是问题。
synchronize
不是问题。没有正确定义默认值是错误的。@H2CO3过度使用同步是错误的编程。由于此方法是定期自动调用的,因此仅当您无法等待自动同步(例如,如果您的应用程序即将退出)或即使未做任何更改也要将用户默认值更新为磁盘上的值时,才使用此方法。很好!我没有注意到。我甚至没有想到有人会犯这样一个愚蠢的小错误……当您存储值时,调试器会说什么?如果您使用的是字符串,那么最好使用setString:forKey和stringForKey:setString不存在?然后调试器只会说当我说无效的CFStringRef只是一个对细节一丝不苟的人。。。您确实有一个对userDefaults对象的实际非nil引用,对吗?i、 e.NSUserDefaults*默认值=[NSUserDefaults standardUserDefaults];没有,但我现在有了。它是有效的。是否要将其转换为答案,我会将其标记为正确。抱歉,setString不存在,但应使用stringForKey进行检索。存储值时,调试器会说什么?如果您使用的是字符串,那么最好使用setString:forKey和stringForKey:setString不存在?然后调试器只会说当我说无效的CFStringRef只是一个对细节一丝不苟的人。。。您确实有一个对userDefaults对象的实际非nil引用,对吗?i、 e.NSUserDefaults*默认值=[NSUserDefaults standardUserDefaults];没有,但我现在有了。它是有效的。您是否希望将其转换为答案,我会将其标记为正确。抱歉,setString不存在,但应使用stringForKey检索。