On 3 Nov 2012, at 22:42, Kyle Sluder <k...@ksluder.com> wrote: > On Nov 2, 2012, at 10:18 PM, "Gerriet M. Denkmann" <gerr...@mdenkmann.de> > wrote: > >> >> On 3 Nov 2012, at 00:35, Kyle Sluder <k...@ksluder.com> wrote: >> >>> If this is just for debugging purposes, you could swizzle -[NSArray >>> description] and -[NSDictionary description]. >> >> I tried a Category for NSArray like: > > You must never use a category to replace an existing method implementation. > Swizzling is the only approach that will work.
About swizzling I found: <http://darkdust.net/writings/objective-c/method-swizzling> and <http://www.cocoawithlove.com/2008/03/supersequent-implementation.html>. What to swizzle: The "String Programming Guide" says: %@ prints "Objective-C object, printed as the string returned by descriptionWithLocale: if available, or description otherwise." In my case: NSArray, NSSet, NSDictionary all have descriptionWithLocale: so this had to be swizzled. Easy way: just return [self debugDescription] which is readable. Disadvantage: it does not print in a nice indented way like the original descriptionWithLocale: does. So I created for the 3 classes of concern: - (NSString *)niceDescriptionIndented: (NSUInteger)indent which prints nice and indented. - (NSString *)niceDescriptionIndented: (NSUInteger)indent { NSMutableString *indenStr = [ NSMutableString string ]; for( NSUInteger i = 0; i < indent; i++ ) [ indenStr appendString: @"\t" ]; NSMutableString *outStr = [ NSMutableString string ]; [ outStr appendFormat: @"%@ (%lu)", [self class], [self count] ]; [ outStr appendString: @"\n" ]; [ outStr appendString: indenStr ]; [ outStr appendString: @"[" ]; [ outStr appendString: @"\n" ]; for( id item in self ) { [ outStr appendString: indenStr ]; [ outStr appendString: @"\t" ]; if ( [ item respondsToSelector: @selector(niceDescriptionIndented:) ] ) { [ outStr appendString: [item niceDescriptionIndented: indent + 1] ]; } else { [ outStr appendString: [item description] ]; }; [ outStr appendString: @"\n" ]; }; [ outStr appendString: indenStr ]; [ outStr appendString: @"]" ]; return outStr; } The NSSet, NSDictionary methods are (almost) identical. Kind regards (and thanks for pushing me in the right direction!) Gerriet. _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com