NSNumber 未从 NSUserDefaults 准确设置
NSNumber not being accurately set from NSUserDefaults
在 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]);
这会记录 "in ViewControllerB, btn pressed: test 1"。
NSNumber *testNum2 = [defaultsTest objectForKey:@"Phase is Known"];
NSLog(@"in ViewControllerB, btn pressed: test2 %d", [testNum2 intValue]);
这记录了 "in ViewControllerB, btn pressed: test2 1"
testNum = [defaults objectForKey:@"Phase is Known"];
NSLog(@"in ViewControllerB, btn pressed: test %d", [testNum intValue]);
这记录了 "in ViewControllerB, btn pressed: test 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]);
这会记录 "phaseIsKnownNSNum from defaultsTest: 0"。
设置断点查看phaseIsKnownNSNum的值为nil
phaseIsKnownNSNum = [defaults objectForKey:@"Phase Is Known"];
NSLog(@"phaseIsKnownNSNum from defaults: %d", [phaseIsKnownNSNum intValue]);
这会记录 "phaseIsKnownNSNum from defaults: 0"。
设置断点查看phaseIsKnownNSNum的值,还是nil
重复使用相同的名称来存储和检索用户默认值是否存在问题?我知道简单的解决方案是使用不同的变量名。但是,此默认值在 ViewControllers C、D、E 中检索,...
NSNumber 变量名每次都必须不同是没有意义的。
您开始使用带有小写 i
的 @"Phase is Known"
。然后你用大写 I
切换到 @"Phase Is Known"
。这显然不匹配,因此您不会检索保存的值。
您应该将每个 NSUserDefaults 键保存在某个地方的全局可访问常量中,这样您就不会出现这样的拼写错误。
在 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]);
这会记录 "in ViewControllerB, btn pressed: test 1"。
NSNumber *testNum2 = [defaultsTest objectForKey:@"Phase is Known"];
NSLog(@"in ViewControllerB, btn pressed: test2 %d", [testNum2 intValue]);
这记录了 "in ViewControllerB, btn pressed: test2 1"
testNum = [defaults objectForKey:@"Phase is Known"];
NSLog(@"in ViewControllerB, btn pressed: test %d", [testNum intValue]);
这记录了 "in ViewControllerB, btn pressed: test 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]);
这会记录 "phaseIsKnownNSNum from defaultsTest: 0"。
设置断点查看phaseIsKnownNSNum的值为nil
phaseIsKnownNSNum = [defaults objectForKey:@"Phase Is Known"];
NSLog(@"phaseIsKnownNSNum from defaults: %d", [phaseIsKnownNSNum intValue]);
这会记录 "phaseIsKnownNSNum from defaults: 0"。
设置断点查看phaseIsKnownNSNum的值,还是nil
重复使用相同的名称来存储和检索用户默认值是否存在问题?我知道简单的解决方案是使用不同的变量名。但是,此默认值在 ViewControllers C、D、E 中检索,...
NSNumber 变量名每次都必须不同是没有意义的。
您开始使用带有小写 i
的 @"Phase is Known"
。然后你用大写 I
切换到 @"Phase Is Known"
。这显然不匹配,因此您不会检索保存的值。
您应该将每个 NSUserDefaults 键保存在某个地方的全局可访问常量中,这样您就不会出现这样的拼写错误。