0

Im essayant de sauver un score élevé en utilisantNSString stringWithFormat "conversion implicite perd la précision entière"

HighScore = [[NSUserDefaults standardUserDefaults]integerForKey:@"ScoreSaved"]; 
Intro3.text = [NSString stringWithFormat:@"HighScore: %i", HighScore]; 

il dit:

« conversion implicite perd la précision entière, NSInterger (aka long) à int

-(void)EndGame 
{ 

if (ScoreNumber > HighScore){ 
    HighScore = ScoreNumber; 
    [[NSUserDefaults standardUserDefaults]setInteger:HighScore forKey:@"ScoreSaved"]; 
} 

ceci est mon premier jeu et je suis coincé comment pourrais-je enregistrer un score élevé? merci de prendre le temps de lire ceci.

+1

S'il vous plaît lire certaines conventions Objectif de code C en premier. Les variables et les signatures de méthodes doivent commencer par un caractère en minuscules. – Alf

+0

duplication possible de [Avertissement "conversion implicite perd précision entière ..."] (http://stackoverflow.com/questions/8813799/warning-implicit-conversion-loses-integer-precision) – Crazyrems

+1

64 bits problème. Votre message d'avertissement est explicite, XCode propose même de le corriger (si vous cliquez sur l'avertissement). Je suis sûr que sur SO il y a déjà une question à ce sujet. – Larme

Répondre

4

Vous utilisez le mauvais spécificateur avec stringWithFormat, mais obtient le droit est difficile si vous voulez soutenir à la fois 32 bits et 64 bits cibles. Il est souvent plus facile d'utiliser %ld et jeter la valeur à long:

Intro3.text = [NSString stringWithFormat:@"HighScore: %ld", (long)HighScore]; 
0

Vous utilisez un spécificateur de format incorrect dans votre formatage de chaîne, ce qui provoque une conversion plus importante pour la variable HighScore().

Utilisez le spécificateur %ld qui est destiné à NSInteger types:

Intro3.text = [NSString stringWithFormat:@"HighScore: %ld", HighScore];