Skip navigation.
 
mlRe: Forwarding messages from an application delegate
FROM : Andy Lee
DATE : Fri May 02 16:55:13 2008

This is smarter than my suggestion.

--Andy

On May 2, 2008, at 10:44 AM, Graham Cox wrote:
> You also need to override -respondsToSelector: and return a logical 
> OR of your delegate plus the old delegate's response, something like:
>
> - (BOOL)    respondsToSelector:(SEL) aSelector
> {
>     BOOL responds = [super respondsToSelector:aSelector];
>     
>     if( !responds )
>         responds = [[self oldDelegate] respondsToSelector:aSelector];
>         
>     return responds;
> }
>
> Also, forwardInvocation isn't called unless your object has already 
> rejected the message, so its implementation should look like:
>
> - (void)    forwardInvocation:(NSInvocation*) invocation
> {
>    SEL aSelector = [invocation selector];
>
>    if ([[self oldDelegate] respondsToSelector:aSelector])
>        [invocation invokeWithTarget:[self controller]];
>    else
>        [self doesNotRecognizeSelector:aSelector];
> }
>
>
> hth,
>
>
> G.
>
>
>
>
> On 3 May 2008, at 12:35 am, Matthew Gertner wrote:
>

>> Hi,
>>
>> I am implementing an application delegate for a framework (Mozilla)
>> that already registers its own delegate internally. Ideally I would
>> like to be able to handle specific delegate messages in my class (in
>> this case adding items to the dock tile menu) and forward all other
>> invocations to the old delegate. So before I call [[NSApplication
>> sharedApplication] setDelegate] for my delegate, I retrieve the
>> existing delegate and save it in a member variable (mOldDelegate). I
>> thought that I could get invocations to forward automatically like
>> this:
>>
>> - (void)forwardInvocation:(NSInvocation *)anInvocation
>> {
>> if ([mOldDelegate respondsToSelector:[anInvocation selector]])
>>  [anInvocation invokeWithTarget:mOldDelegate];
>> else
>>  [super forwardInvocation:anInvocation];
>> }
>>
>> - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
>> {
>> if ([mOldDelegate respondsToSelector:aSelector])
>>  return [mOldDelegate methodSignatureForSelector:aSelector];
>> else
>>  return [super methodSignatureForSelector: aSelector];
>> }
>>
>> For some reason neither methodSignatureForSelector nor
>> forwardInvocation is ever called. Perhaps this has something to do
>> with the way messages are sent to the delegate by the application. As
>> a result, my delegate never forwards to the old delegate. Any 
>> guidance
>> would be appreciated.
>>
>> Matt
>> _______________________________________________
>>
>> Cocoa-dev mailing list (<email_removed>)
>>
>> 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/graham.<email_removed>
>>
>> This email sent to graham.<email_removed>

>
> _______________________________________________
>
> Cocoa-dev mailing list (<email_removed>)
>
> 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/<email_removed>
>
> This email sent to <email_removed>

Related mailsAuthorDate
mlForwarding messages from an application delegate Matthew Gertner May 2, 16:35
mlRe: Forwarding messages from an application delegate Graham Cox May 2, 16:44
mlRe: Forwarding messages from an application delegate Andy Lee May 2, 16:53
mlRe: Forwarding messages from an application delegate Andy Lee May 2, 16:55
mlRe: Forwarding messages from an application delegate Matthew Gertner May 2, 16:55
mlRe: Forwarding messages from an application delegate Matthew Gertner May 2, 16:56
mlRe: Forwarding messages from an application delegate Bill Cheeseman May 2, 17:04
mlRe: Forwarding messages from an application delegate Graham Cox May 2, 17:18