Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

jardeon

macrumors newbie
Original poster
Jul 29, 2007
16
0
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.



Code:
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:
Code:
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:
Code:
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.

Code:
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:

Code:
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

macrumors 68040
Jan 10, 2005
3,182
3
Dallas, TX
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:
Code:
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

macrumors newbie
Original poster
Jul 29, 2007
16
0
Thanks Lee!

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

- Jared
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.