Ich arbeite an einigen Übungen und habe eine Warnung erhalten, die besagt:
Die implizite Konvertierung verliert an ganzzahliger Genauigkeit: 'NSUInteger' (auch bekannt als 'unsigned long') in '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;
}
quelle
Im Gegensatz zu Martins Antwort ist das Casting auf int (oder das Ignorieren der Warnung) nicht immer sicher, selbst wenn Sie wissen, dass Ihr Array nicht mehr als 2 ^ 31-1 Elemente enthält. Nicht beim Kompilieren für 64-Bit.
Beispielsweise:
quelle
indexOfObject:
eine schlechte Idee wäre. Meine Antwort war für den spezifischen Code in der Frage gedacht, und diecount
Methode kann nicht zurückkehrenNSNotFound
. Ich habe nicht empfohlen, Warnungen auf int zu setzen oder Warnungen generell zu ignorieren. Entschuldigung, wenn das unklar war. Tatsächlich würde Ihr Beispielcode bei einerif (i == NSNotFound)
Kompilierung für 64-Bit eine Warnung generieren , sodass das Problem nicht unbemerkt bleibt.Ändern Sie den Schlüssel in Projekt> Build-Einstellung " typecheck-Aufrufe an printf / scanf : NO "
Erklärung: [Wie es funktioniert]
Überprüfen Sie die Aufrufe von printf und scanf usw., um sicherzustellen, dass die angegebenen Argumente Typen haben, die der angegebenen Formatzeichenfolge entsprechen, und dass die in der Formatzeichenfolge angegebenen Konvertierungen sinnvoll sind.
Hoffe es funktioniert
Andere Warnung
Die implizite Konvertierung von Ziel c verliert die ganzzahlige Genauigkeit 'NSUInteger' (auch bekannt als 'unsigned long') in 'int
Änderungsschlüssel " implizite Konvertierung in 32-Bit-Typ> Debug> * 64-Architektur: Nein "
[ Vorsicht: Möglicherweise wird eine andere Warnung zur 64-Bit-Architekturkonvertierung ungültig] .
quelle
Das expizite Casting auf "int" löst das Problem in meinem Fall. Ich hatte das gleiche Problem. So:
quelle