-2

从 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 但即使在那个时候它也会不正确。我究竟做错了什么?谢谢,詹姆斯

4

4 回答 4

1

NSInteger是原始类型,而不是对象。它应该NSInteger currentGlobalRank代替NSInteger *currentGlobalRank. 您可以在代码中使用NSInteger而不是。int无需将 a 转换NSIntegerint.

在 iOS 上,NSInteger定义为int,在 OS X 上定义为long.

于 2013-01-09T11:43:51.310 回答
1

您正在设置一个整数并尝试将指针检索为整数。改变:

NSInteger *currentGlobalRank = [submissionDefaults integerForKey:@"globalRankIntForLT"];

至:

NSInteger currentGlobalRank = [submissionDefaults integerForKey:@"globalRankIntForLT"];

尽管NSInteger从 NS 开始,它不是 的子类NSObject,但它只是原始的

于 2013-01-09T11:45:49.823 回答
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);
于 2013-01-09T11:44:08.153 回答
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);
于 2013-01-09T11:43:33.463 回答