![](/img/trans.png)
[英]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.