NSInteger myInt = 1804809223;
NSLog(@"%i", myInt); <====
The code above produces an error:
Values of type 'NSInteger' should not be used as format arguments; add an explicit cast to 'long' instead
The corrected NSLog
message is actually NSLog(@"%lg", (long) myInt);
. Why do I have to convert the integer value of myInt
to long
if I want the value to display?
You get this warning if you compile on OS X (64-bit), because on that platform NSInteger
is defined as long
and is a 64-bit integer. The %i
format, on the other hand, is for int
, which is 32-bit. So the format and the actual parameter do not match in size.
Since NSInteger
is 32-bit or 64-bit, depending on the platform, the compiler recommends
to add a cast to long
generally.
Update: Since iOS 7 supports 64-bit now as well, you can get the same warning when compiling for iOS.