簡體   English   中英

我怎樣才能將 int 等於 int64_t 而不得到轉換丟失整數精度警告?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM