我在保存时遇到问题&从NSUserDefaults检索int。我使用以下代码保存到NSUserDefaults:
int globalRank = 1;
NSUserDefaults *submissionDefaults = [NSUserDefaults standardUserDefaults];
[submissionDefaults setInteger: globalRank forKey:@"globalRankIntForLT"];
NSLog(@"updating %@ as the globalRank in NSUserDefaults",globalRank);
[submissionDefaults synchronize];
这似乎可以正常工作。在我的输出中,我可以看到:
"updating 1 as the globalRank in NSUserDefaults"
当我使用以下代码检索号码时:
NSUserDefaults *submissionDefaults = [NSUserDefaults standardUserDefaults];
NSInteger *currentGlobalRank = [submissionDefaults integerForKey:@"globalRankIntForLT"];
int currentGlobalRankInt = currentGlobalRank;
NSLog(@"Retrieved skip int is: %d as nsinteger is: %d",currentGlobalRankInt, currentGlobalRank);
I get output:
"Retrieved skip int is: 4978484032 as nsinteger is: 4978484032"
我稍后将此int传递给另一个返回错误的方法,因为4978484032比预期的要大。
NSUserDefaults包含一个NSInteger,但即使在那时它也不正确。我究竟做错了什么?谢谢,詹姆斯
答案 0 :(得分:1)
NSInteger
是原始类型,而不是对象。它应该是NSInteger currentGlobalRank
而不是NSInteger *currentGlobalRank
。
您可以在代码中使用NSInteger
代替int
。无需将NSInteger
转换为int
。
在iOS上,NSInteger
定义为int
,在OS X上定义为long
。
答案 1 :(得分:1)
您正在设置一个整数并尝试将POINTER检索为整数。变化:
NSInteger *currentGlobalRank = [submissionDefaults integerForKey:@"globalRankIntForLT"];
为:
NSInteger currentGlobalRank = [submissionDefaults integerForKey:@"globalRankIntForLT"];
尽管NSInteger
从NS开始,它不是NSObject
的子类,但它只是原始的
答案 2 :(得分:0)
更改此代码......
NSInteger *currentGlobalRank = [submissionDefaults integerForKey:@"globalRankIntForLT"];
int currentGlobalRankInt = currentGlobalRank;
NSLog(@"Retrieved skip int is: %d as nsinteger is: %d",currentGlobalRankInt, currentGlobalRank);
为...
NSInteger *currentGlobalRank = [submissionDefaults integerForKey:@"globalRankIntForLT"];
int currentGlobalRankInt = [currentGlobalRank intValue];
NSLog(@"Retrieved skip int is: %d as nsinteger is: %@",currentGlobalRankInt, currentGlobalRank);
答案 3 :(得分:0)
使用NSInteger
或类似NSNumber
的包装类而不是int
。
你错误地将 * 放在 NSInteger * currentGlobalRank
中NSInteger globalRank = 1;
NSUserDefaults *submissionDefaults = [NSUserDefaults standardUserDefaults];
[submissionDefaults setInteger: globalRank forKey:@"globalRankIntForLT"];
NSLog(@"updating %@ as the globalRank in NSUserDefaults",globalRank);
[submissionDefaults synchronize];
NSUserDefaults *submissionDefaults = [NSUserDefaults standardUserDefaults];
NSInteger currentGlobalRank = [submissionDefaults integerForKey:@"globalRankIntForLT"];
NSLog(@"Retrieved skip int is: %d as nsinteger is: %d",currentGlobalRank, currentGlobalRank);