簡體   English   中英

隱式轉換在制作應用程序時將整數精度'NSUInteger'(aka'unsigned long')轉換為'int'嗎?

[英]implicit conversion loses integer precision 'NSUInteger' (aka 'unsigned long') to 'int' when making app?

我正在編碼,並遇到了這個問題。

我不明白為什么會這樣,我需要幫助,有人可以幫忙嗎? :)

- (void)viewDidLoad
{
Start = YES;
Obstacle.hidden = YES;
Obstacle2.hidden = YES;
Bottom1.hidden = YES;
Bottom2.hidden = YES;
Bottom3.hidden = YES;
Bottom4.hidden = YES;
Bottom5.hidden = YES;
Bottom6.hidden = YES;
Bottom7.hidden = YES;
Top1.hidden = YES;
Top2.hidden = YES;
Top3.hidden = YES;
Top4.hidden = YES;
Top5.hidden = YES;
Top6.hidden = YES;
Top7.hidden = YES;

Heli.center = CGPointMake(48, 145);

HighScore = [[NSUserDefaults standardUserDefaults] integerForKey:@"HighScoreSaved"]; < issue HERE

Intro3.text = [NSString stringWithFormat:@"High Score: %i", HighScore];

integerForKey返回NSUInteger值(又名無符號長)。 我假設您的HighScore變量是一個int,其字節數少於一個long。 嘗試轉換為int:

HighScore = (int)[[NSUserDefaults standardUserDefaults] integerForKey:@"HighScoreSaved"];

我猜是在倒數第二行。 integerForKey:返回一個NSUInteger(無符號長整數),並且HighScore可能被聲明為int(您未在代碼中顯示該聲明)。 可以使用(int)顯式轉換它,也可以將其存儲為int形式,以用戶默認設置( intForKey: 祝好運!

如果您包括HighScore的聲明,那會很好,但是我將假定它是一個int因為這是您遇到的類型。 當要分配HighScore到的結果-[NSUserDefaults integerForKey:]要指定類型的變量NSUInteger鍵入int 這是問題的根源。 由於NSUInteger類型定義為unsigned long並且long在賦值期間比int更大的數字表示形式,因此您將失去精度。 我有兩個建議。

@property (nonatomic) NSUInteger HighScore; // declare HighScore as NSUInteger

/* or */

HighScore = (int)[[NSUserDefaults standardUserDefaults] integerForKey:@"HighScoreSaved"];

首先,它首先將HighScore聲明為NSUInteger,以避免發生該問題;而第二個方法則將方法的返回類型轉換為適合其分配的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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