Delegate methods aren't sent at all unless the delegate implements them. I think your delegate is going to have to implement all possible delegate methods and then forward them *if* the old delegate implements them, and otherwise return an appropriate default value if there is a return value.

This means the application will send all possible delegate methods to you, as opposed to just the ones the old delegate implements, but hopefully that won't cause any problems. I suppose you could do some low-level hacking where you detect which methods the old delegate implements and then remove unneeded methods from your delegate class.

--Andy

On May 2, 2008, at 10: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 (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/aglee%40mac.com

This email sent to [EMAIL PROTECTED]

_______________________________________________

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 [EMAIL PROTECTED]

Reply via email to