• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag
 

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Forwarding messages from an application delegate
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Forwarding messages from an application delegate


  • Subject: Re: Forwarding messages from an application delegate
  • From: Graham Cox <email@hidden>
  • Date: Sat, 3 May 2008 00:44:29 +1000

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@hidden)

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:
This email sent to email@hidden

_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:
This email sent to email@hidden


  • Follow-Ups:
    • Re: Forwarding messages from an application delegate
      • From: Bill Cheeseman <email@hidden>
    • Re: Forwarding messages from an application delegate
      • From: "Matthew Gertner" <email@hidden>
    • Re: Forwarding messages from an application delegate
      • From: Andy Lee <email@hidden>
References: 
 >Forwarding messages from an application delegate (From: "Matthew Gertner" <email@hidden>)

  • Prev by Date: Forwarding messages from an application delegate
  • Next by Date: Re: Forwarding messages from an application delegate
  • Previous by thread: Forwarding messages from an application delegate
  • Next by thread: Re: Forwarding messages from an application delegate
  • Index(es):
    • Date
    • Thread