NSUserDefaults行为不规律

时间:2014-02-12 05:00:47

标签: ios nsuserdefaults

我能知道NSUserDefaults的确切运作方式吗? 我用它来维护用户信息,如用户名。 在我设置的一个控制器中:

 NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
 [prefs setObject:@"xyz" forKey:@"username"];

在另一个中我将其检索为:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

username = [prefs stringForKey:@"username"];

它有时有效,但有时候setobject没有设置任何内容(username = [prefs stringForKey:@"username"];给我nil。有时它工作正常。我认为这是一个持久存储因此我是不确定发生了什么。这是在模拟器中,因为我还没有机会在手机上测试它。

2 个答案:

答案 0 :(得分:0)

这就是Mac开发者库对NSUserDefaults的评论

  

NSUserDefaults类提供了一个用于与默认系统交互的编程接口。默认系统允许应用程序自定义其行为以匹配用户的首选项。例如,您可以允许用户确定应用程序显示的度量单位或自动保存文档的频率。应用程序通过将值分配给用户默认数据库中的一组参数来记录此类首选项。这些参数被称为默认值,因为它们通常用于确定启动时应用程序的默认状态或默认情况下的行为方式。

     

在运行时,您使用NSUserDefaults对象从用户的默认数据库中读取应用程序使用的默认值。 NSUserDefaults缓存信息以避免每次需要默认值时都必须打开用户的默认数据库。 同步方法,会定期自动调用,会使内存缓存与用户的默认数据库保持同步

     

NSUserDefaults类提供了访问常用类型(如浮点数,双精度数,整数,布尔值和URL)的便捷方法。默认对象必须是属性列表,即(或集合的实例组合)的实例:NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary。如果要存储任何其他类型的对象,通常应将其存档以创建NSData实例。有关更多详细信息,请参阅“首选项和设置编程指南”。

     

即使您将可变对象设置为值,NSUserDefaults返回的值也是不可变的。例如,如果将可变字符串设置为" MyStringDefault"的值,则稍后使用stringForKey:检索的字符串将是不可变的。

     

为每个用户自动创建默认数据库。 NSUserDefaults类目前不支持每主机首选项。为此,您必须使用CFPreferences API(请参阅“首选项实用程序参考”)。但是,NSUserDefaults正确读取每个主机的首选项,因此您可以安全地将CFPreferences代码与NSUserDefaults代码混合。

     

如果您的应用程序支持托管环境,则可以使用NSUserDefaults对象来确定管理员管理哪些首选项以使用户受益。托管环境对应于计算机实验室或教室,管理员或教师可能希望以特定方式配置系统。在这些情况下,教师可以建立一组默认首选项并强制用户使用这些首选项。如果以这种方式管理首选项,则应用程序应通过禁用任何适当的控件来阻止用户编辑该首选项。

答案 1 :(得分:0)

Would u mind trying this.

   [[NSUserDefaults standardUserDefaults] setObject:@"xyz" forKey:@"username"];

比你正在做的那样。

使用

检查值
  NSLog(@"%@",[NSUserDefaults standardUserDefaults] objectForKey:@"username"]);
相关问题