Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Replace array display method?

Tags:

objective-c

I am curious how I might override the description method that is used when you do the following (see below) for an object. I basically want to better format the output, but am unsure about how I might go about setting this up.

NSLog(@"ARRAY: %@", myArray);

many thanks

EDIT_001

Although subclassing NSArray would have worked I instead decided that I would add a category to NSArray (having not used one before) Here is what I added ...

// ------------------------------------------------------------------- **
// CATAGORY: NSArray
// ------------------------------------------------------------------- **
@interface NSArray (displayNSArray)
    -(NSString*)display;
@end

@implementation NSArray (displayNSArray)
-(NSString*)display {
    id eachIndex;
    NSMutableString *outString = [[[NSMutableString alloc] init] autorelease];
    [outString appendString:@"("];
    for(eachIndex in self) {
        [outString appendString:[eachIndex description]];
        [outString appendString:@" "];
    }
    [outString insertString:@")" atIndex:[outString length]-1];
    return(outString);
}
@end

gary

like image 945
fuzzygoat Avatar asked Feb 01 '26 10:02

fuzzygoat


2 Answers

If you're doing this a lot, the easiest way to reformat the display of your array would be to add a new prettyPrint category to the NSArray class.

@interface NSArray ( PrettyPrintNSArray )
- (NSSTring *)prettyPrint;
@end

@implementation NSArray ( PrettyPrintNSArray )
- (NSString *)prettyPrint {
    NSMutableString *outputString = [[NSMutableString alloc] init];
    for( id item in self ) {
        [outputString appendString:[item description]];
    }
    return outputString;
}
@end

Obviously you'd need to alter the for loop to get the formatting the way you want it.

like image 95
kubi Avatar answered Feb 03 '26 23:02

kubi


I'm assuming that you myArray variable is an instance of the NSArray/NSMutableArray class.

When NSLog() encounters the @ character in its format string, it calls the -description: method on the object. This is a method on the root class, NSObject from which all other Cocoa classes inherit. -description: returns an NSString allowing any object that implements this method to be passed into NSLog(@"@",anyObject) and have a nicely formatted output. The string returned can be anything you care to construct.

For your specific problem, you could subclass NSMutableArray and override the -description: method with your own implementation. Then utilise your subclass instead of NSMutableArray.

For more information on NSObject and -description: see Apple's docs.

like image 37
mikecsh Avatar answered Feb 04 '26 00:02

mikecsh



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!