iOS9和XCode 7中的NSUserDefaults不返回值

Jon*_*Jon -4 nsuserdefaults ios

我正在使用NSUserDefaults来检索值.例如用户名.

我已经创建了一个constants.h文件,将它添加到我的viewcontroller中

#import "constants.h"
Run Code Online (Sandbox Code Playgroud)

在constants.h中 - 用户名定义为

#define USERNAME @"Monty Python"  
Run Code Online (Sandbox Code Playgroud)

然后在我的viewDidLoad中,我尝试读取这样的值

  NSString *userName = [[NSUserDefaults standardUserDefaults] stringForKey:USERNAME];
Run Code Online (Sandbox Code Playgroud)

但是userName总是nil/null - 我的其他键也是如此.

NSUserDefaults如何知道使用我的Constants.h文件?我的代码是否在正确的"位置"?为什么我的值总是为零 - 在调试器和NSLog中?

谢谢

mat*_*att 5

NSUserDefaults如何知道使用我的Constants.h文件?

它没有.两者之间没有任何联系,任何期望有一个是错误的.您的Constants.h文件在代码中配置一些全局变量,作为全局变量可用于其他代码(假设代码导入该文件).NSUserDefaults是一种在磁盘上保存和检索键值对.plist文件的方法.对于完全不同的目的,它们是完全不同的东西.

在您的代码中,您使用Constants.h文件作为向代码提供要在NSUserDefaults中使用的密钥名称的方法.这是一个很好的做法!但这与这些键对应的如何首先进入 NSUserDefaults无关.

设置"默认默认值"的方法(即,每个键值对的初始值保留在NSUserDefaults中) - 如果这是你要做的 - 是通过很早运行的代码并调用registerDefaults:.