Re: default method on an object
Re: default method on an object
- Subject: Re: default method on an object
- From: Greg Titus <email@hidden>
- Date: Fri, 6 Jul 2001 12:37:05 -0700
On Friday, July 6, 2001, at 09:24 AM, Jeff Medcalf wrote:
Is there a way in Cocoa, to declare a method, such that a message to
the object containing that method, which does not find a method to
invoke, will invoke that method instead. In other words, if I have a
class with 1 method, myMethod:, and it gets a message like [myObject
someOtherMethod:], is there a way that I can have myMethod: invoked
instead of an error being generated?
Yes, this is one of the great features of Objective-C that lets you
implement things like Distributed Objects in a very straightforward way.
Read the documentation for the -forwardInvocation: method on NSObject,
and look at the documentation for NSInvocation. Your object should
implement something like:
- (void)forwardInvocation:(NSInvocation *)invocation
{
// change the method from whatever it was to "myMethod:" and then
resend it
[invocation setSelector:@selector(myMethod:)];
[invocation invoke];
}
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
{
NSMethodSignature *result;
// If we don't recognize a method, return the signature for
"myMethod:" instead
result = [super methodSignatureForSelector: aSelector];
if (!result)
result = [super methodSignatureForSelector:@selector(myMethod:)];
return result;
}
Hope this helps,
--Greg