2012-11-13 6 views
7

Ich habe die folgende Codezeile in meinem Mac OS X-Anwendung:NSLog gibt mir Warnungen, die nicht korrigierbar sind

NSLog(@"number of items: %ld", [urlArray count]); 

Und ich bekomme die Warnung: „Format gibt Typ‚long‘, aber das Argument Typ 'NSUInteger' (auch bekannt als 'unsigned int')“

Allerdings, wenn ich meinen Code ändern:

NSLog(@"number of items: %u", [urlArray count]); 

ich die Warnung:

Format gibt 'unsigned int', aber das Argument Typ 'NSUInteger' (auch bekannt als 'unsigned long')

So dann ich es

ändern
NSLog(@"number of items: %u", [urlArray count]); 

aber ich erhalte die Warnung geben: Format legt fest, Geben Sie 'unsigned long' ein, aber das Argument hat den Typ 'NSUInteger' (aka 'unsigned int')

Wie kann ich meinen NSLog so einrichten, dass er keine Warnung generiert? Wenn ich den Vorschlägen von Xcode folge, steige ich in eine Endlosschleife des Änderns des Formatbezeichners ein, aber die Warnungen verschwinden nie.

Antwort

14

Ja das ist nervig. Es ist eine 32/64 Bit Sache, glaube ich. Die einfachste Sache zu tun ist, nur auf einen langen gegossen:

NSLog(@"number of items: %lu", (unsigned long)[urlArray count]); 
6

Die portability guide für universelle Anwendungen empfehlen in diesem Fall Gießen.

NSLog(@"number of items: %ld", (unsigned long)[urlArray count]); 
+0

Die eher unnötig scheint aber es klar, dass die Warnungen auf. – Jackson

+3

Nicht sicher, ob es einen Unterschied macht, aber Sie sollten wahrscheinlich auf den gleichen Typ wie der Formatbezeichner verweisen. Also (unsigned long) wäre% lu, oder (long) wäre% ld –

+0

@darren es macht einen Unterschied, nicht so ist undefiniertes Verhalten. –

Verwandte Themen