[英]AFURLConnectionOperation.m Implicit conversion loses integer precision: 'int64_t' (aka 'long long') to 'NSInteger' (aka 'int')
[英]How can i equal a int to a int64_t with out getting the conversion loses integer precision warning?
我收到隐式转换丢失整数精度警告,需要帮助找到解决方案。 我见过类似的问题,但还没有找到解决我的问题的方法。 这是声明的整数...
@property (nonatomic) int64_t score;
NSInteger highscorenumber;
这是调用游戏结束功能时我的 .m 文件中的内容...
if (score > highscorenumber) {
highscorenumber = score;
[[NSUserDefaults standardUserDefaults] setInteger:highscorenumber forKey:@"highscoresaved"];
[self clapsound];
}
else{
highscore.text = [NSString stringWithFormat:@"High Score: %li",(long)highscorenumber];
}
这部分出现警告
highscorenumber = score;
如果我将 highscorenumber 更改为 int64_t 警告出现在这里...
[[NSUserDefaults standardUserDefaults] setInteger:highscorenumber forKey:@"highscoresaved"];
我使用 int64_t 得分的原因是使用 GameKit (GameCenter)。
NSInteger 和 long 总是指针大小的。 这意味着它们在 32 位系统上是 32 位,在 64 位系统上是 64 位。
在 mac os 下 uint64_t 定义为
typedef unsigned long long uint64_t;
因此,我建议您将 highscorenumber 更改为 NSUInteger 并将其保存到 NSUserDefaults 作为
[[NSUserDefaults standardUserDefaults] setValue:@(highscorenumber) forKey:@"highscoresaved"];
编辑:
取回价值:
NSNumber *highscorenumber = (NSNumber*)[[NSUserDefaults standardUserDefaults] valueForKey:@"highscoresaved"];
尝试这个:
highscorenumber = @(score);
尝试这个
highscorenumber = [score integerValue];
为什么使用NSInteger
来存储highscorenumber
? 如果你想让它与 GameKit 兼容,它应该是 64 位的,你需要使用 int64_t 作为你的高分属性
int64_t highscorenumber;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.