Je travaille sur quelques exercices et j'ai un avertissement qui déclare:
La conversion implicite perd la précision entière: 'NSUInteger' (aka 'unsigned long') en 'int'
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
@autoreleasepool {
NSArray *myColors;
int i;
int count;
myColors = @[@"Red", @"Green", @"Blue", @"Yellow"];
count = myColors.count; // <<< issue warning here
for (i = 0; i < count; i++)
NSLog (@"Element %i = %@", i, [myColors objectAtIndex: i]);
}
return 0;
}
la source
Contrairement à la réponse de Martin, transtyper en int (ou ignorer l'avertissement) n'est pas toujours sûr même si vous savez que votre tableau ne contient pas plus de 2 ^ 31-1 éléments. Pas lors de la compilation pour 64 bits.
Par exemple:
la source
indexOfObject:
serait une mauvaise idée. Ma réponse était destinée au code spécifique de la question et lacount
méthode ne peut pas retournerNSNotFound
. Je n'ai pas recommandé de cast en int ou d'ignorer les avertissements en général. Désolé si ce n'était pas clair. En fait, votre exemple de code générerait un avertissement àif (i == NSNotFound)
s'il était compilé pour 64 bits, de sorte que le problème ne passerait pas inaperçu.Modifier la clé dans Projet> Paramètre de construction " vérifier les appels à printf / scanf : NON "
Explication: [Comment ça marche]
Vérifiez les appels à printf et scanf, etc., pour vous assurer que les arguments fournis ont des types appropriés à la chaîne de format spécifiée et que les conversions spécifiées dans la chaîne de format ont un sens.
J'espère que ça marche
Autre avertissement
objectif c la conversion implicite perd la précision entière 'NSUInteger' (aka 'unsigned long') en 'int
Modifier la clé " conversion implicite en 32 bits Type> Débogage> architecture * 64: Non "
[ attention: cela peut annuler tout autre avertissement de conversion d'architecture 64 bits] .
la source
Faire le casting expicite vers "int" résout le problème dans mon cas. J'ai eu le même problème. Alors:
la source