[英]implicit conversion loses integer precision 'NSUInteger' (aka 'unsigned long') to 'int' warning?
[英]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.