在ViewControllerA中,我设置了以下内容:
NSNumber *phaseIsKnownNSNum = 1
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:phaseIsKnownNSNum forKey:@"Phase is Known"];
[defaults synchronize];
在ViewControllerB中,只要我不使用相同的“phaseIsKnownNSNum”变量名,我就可以从用户默认值中提取此值。在ViewControllerB中按下按钮后发生以下情况:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//using 2 instances of the standardUserDefaults, just to be sure.
NSUserDefaults *defaultsTest = [NSUserDefaults standardUserDefaults];
NSNumber *testNum = [defaultsTest objectForKey:@"Phase is Known"];
NSLog(@"in ViewControllerB, btn pressed: test %d", [testNum intValue]);
这记录“在ViewControllerB中,按下btn:test 1”。
NSNumber *testNum2 = [defaultsTest objectForKey:@"Phase is Known"];
NSLog(@"in ViewControllerB, btn pressed: test2 %d", [testNum2 intValue]);
此日志“在ViewControllerB中,btn按下:test2 1”
testNum = [defaults objectForKey:@"Phase is Known"];
NSLog(@"in ViewControllerB, btn pressed: test %d", [testNum intValue]);
此日志“在ViewControllerB中,btn按下:测试1”
在ViewControllerB中尝试使用“phaseIsKnownNSNum”时,我不是很幸运。
//I've tried not allocating & initializing. Gives the same issue.
NSNumber *phaseIsKnownNSNum = [[NSNumber alloc] initWithInt:1];
NSLog(@"phaseIsKnownNSNum from initialized value: %d", [phaseIsKnownNSNum intValue]);
此日志:“phaseIsKnownNSNum from initialized value:1”
phaseIsKnownNSNum = [defaultsTest objectForKey:@"Phase Is Known"];
NSLog(@"phaseIsKnownNSNum from defaultsTest: %d", [phaseIsKnownNSNum intValue]);
这会记录“defaultsTest中的phaseIsKnownNSNum:0”。
设置断点并检查phaseIsKnownNSNum的值,它是零。
phaseIsKnownNSNum = [defaults objectForKey:@"Phase Is Known"];
NSLog(@"phaseIsKnownNSNum from defaults: %d", [phaseIsKnownNSNum intValue]);
这会记录“phaseIsKnownNSNum from defaults:0”。
设置断点并检查phaseIsKnownNSNum的值,它仍然是零。
重用相同名称存储和检索用户默认值是否存在问题?我知道简单的解决方案是使用不同的变量名称。但是,此默认值在ViewControllers C,D,E,...中检索
每次NSNumber变量名称必须不同是没有意义的。
答案 0 :(得分:1)
您开始使用@"Phase is Known"
小写i
。然后,您使用大写@"Phase Is Known"
切换到I
。这显然不匹配,因此您不会检索保存的值。
您应该将每个NSUserDefaults密钥保存在某个地方的全局可访问常量中,这样就不会像这样进行拼写错误。