It looks like you've declared the method, but never actually implemented it! 
What's your .m file look like?

On 30 Mar 2011, at 03:33, Nik Heger wrote:

> I am new to Objective-C so please forgive me if this is obvious.
> 
> I come from Ruby, where extending built in classes is straight forward - you
> do it, and it works. I expected the same in Obj-C but got a confusing
> result: It works sometimes, but not others.
> 
> Here is what I did:
> 
> 1 - Created a Category on NSObject, this is the header, implementation was
> working and tested too (and pretty simple)
> 
> @interface NSObject (Logger)
> 
> - (void) LOGx1: (id) first, ...;// support for simple logging of multiple
> string
> 
> @end
> 
> So now, I expected to be able to call LOGx1 on any object
> 
> 2 - Tried this out on a String object and on my UIViewController subclass
> which gets loaded from a nib file
> 
> // FirstViewController.m - subclass of UIViewController, loaded from a nib
> 
> #import "NSObject-Logger.h"
> ...
> 
> - (void)sample
> 
> {
> 
>    NSString *test = @"A TEST";
> 
>    [test LOGx1: @"Testing NSString!",nil]; // working
> 
>    [self LOGx1: @"foobar ",nil]; // throwing exception
> 
> }
> 
> The first invocation works as expected. Seems like NSString knows about the
> Logger category. The second one crashes with an unknown selector. The stack
> trace seems to indicate that my FirstViewController class inherits from
> NSObject(NSObject) instead of NSObject(Logger). Output and stack trace in
> [1].
> 
> That's as far as I got. Question is, why?
> 
> I tried the -ObjC and the -all_load linking flags after Googling for the
> issue - didn't make a difference.
> 
> The thing I don't understand is: If I define a category on a built-in
> object, I expect it to work under all circumstances. If it doesn't work for
> some, it would be rather pointless to have this facility, no? Is there
> anything obvious I am missing? Does it have to do with the NIB/XIB loading?
> 
> thanks, sorry for the length...
> 
> ~Nik
> 
> PS: I later realized logging as a Category makes no sense and moved it into
> its own Logger class where it's a class method; but I still want to
> understand categories.
> 
> [1]
> Here is what I get for the stack trace:
> 
> *2011-03-30 09:18:52.802 xxx[23245:207] Testing NSString!*
> 
> *2011-03-30 09:18:52.803 xxx[23245:207] -[FirstViewController LOGx1:]:
> unrecognized selector sent to instance 0x4d37f30*
> 
> *2011-03-30 09:18:52.805 xxx[23245:207] *** Terminating app due to uncaught
> exception 'NSInvalidArgumentException', reason: '-[FirstViewController
> LOGx1:]: unrecognized selector sent to instance 0x4d37f30'*
> 
> **** Call stack at first throw:*
> 
> *(*
> 
> * 0   CoreFoundation                      0x00e935a9 __exceptionPreprocess +
> 185*
> 
> * 1   libobjc.A.dylib                     0x00fe7313 objc_exception_throw +
> 44*
> 
> * 2   CoreFoundation                      0x00e950bb -[NSObject(NSObject)
> doesNotRecognizeSelector:] + 187*
> *
> *
> *
> *
> _______________________________________________
> 
> 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:
> http://lists.apple.com/mailman/options/cocoa-dev/cocoadev%40mikeabdullah.net
> 
> This email sent to cocoa...@mikeabdullah.net

_______________________________________________

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to