Displaying Boolean values

Discussion in 'Mac Programming' started by jardeon, Jan 29, 2009.

  1. macrumors newbie

    Joined:
    Jul 29, 2007
    #1
    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!
     
  2. macrumors 68040

    lee1210

    Joined:
    Jan 10, 2005
    Location:
    Dallas, TX
    #2
    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
     
  3. thread starter macrumors newbie

    Joined:
    Jul 29, 2007
    #3
    Thanks Lee!

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

    - Jared
     

Share This Page