PDA

View Full Version : Displaying Boolean values




jardeon
Jan 29, 2009, 05:58 PM
Hi everyone,

I've been noodling around a bit in Objective-C and Xcode, and I've run into some trouble in trying to log output using NSLog.




BOOL yesFlag = YES;
BOOL noFlag = NO;
NSLog(@"This string should end with NO: %@", noFlag);
NSLog(@"This string should end with YES: %@", yesFlag);


I get the following:

2009-01-29 18:55:08.707 PrintingBooleans[26312:10b] This string should end with NO: (null)

then a crash, then the following error: Program received signal: "EXC_BAD_ACCESS".

If I change the code so that the string interpolation is using decimals instead, like so:

BOOL yesFlag = YES;
BOOL noFlag = NO;
NSLog(@"This string should end with NO: %d", noFlag);
NSLog(@"This string should end with YES: %d", yesFlag);


I get the following.


2009-01-29 18:57:00.065 PrintingBooleans[26331:10b] This string should end with NO: 0
2009-01-29 18:57:00.093 PrintingBooleans[26331:10b] This string should end with YES: 1


What's the proper Obj-C/XCode way to get this output:


2009-01-29 18:57:00.065 PrintingBooleans[26331:10b] This string should end with NO: NO
2009-01-29 18:57:00.093 PrintingBooleans[26331:10b] This string should end with YES: YES


Thanks!



lee1210
Jan 29, 2009, 06:06 PM
BOOL is not an object, it is typedef'd to a primitive (can't remember which, not at a mac) with YES and NO defined as macros... 1 and 0 accordingly.

So you can do a few things... i think this is somewhat elegant:
BOOL yesFlag = YES;
BOOL noFlag = NO;
NSLog(@"This string should end with NO: %@", noFlag?@"YES":@"NO");
NSLog(@"This string should end with YES: %@", yesFlag?@"YES":@"NO");

You could certainly write a function or macro that returns an NSString with the appropriate value when passed a BOOL as well.

You are passing a primitive to NSLog and telling NSLog it is an Object with %@. You could also just print with %d as you saw, since BOOL is some sort of number, but you will just get 0 or 1, not a word as your output shows.

-Lee

jardeon
Jan 29, 2009, 06:15 PM
Thanks Lee!

The ternary operation was exactly what I was looking for, that worked like a charm.

- Jared