On Jul 13, 2010, at 7:53 AM, Graham Cox wrote:

> It appears that calling -setValue:forKey: on an object bypasses or ignores 
> any invocation forwarding it has set up, unless I'm missing some obvious 
> error.
> 
> I have an object that acts as a wrapper for another object, and so that the 
> wrapper can, under some circumstances, act as the thing it is wrapping, it 
> implements invocation forwarding using the 'classic' approach of overriding 
> -respondsToSelector:, -methodSignatureForSelector: and -forwardInvocation: 
> but when I call -setValue:forKey: on the wrapper (where key is implemented by 
> the thing wrapped), it throws the 'not key-value coding compliant for key' 
> exception. The stack trace appears to show that this failure occurs before it 
> has even attempted to follow the forwarded path. However if I simply call the 
> wrapped property setter directly, the forwarding works. As this needs to work 
> on 10.5, I can't use the 10.6 solution of -forwardingTargetForSelector: (not 
> that I've tested it to see if it exhibits the same issue or not). 
> 
> Is this the expected behaviour?

Well, the documentation (KVC Programming Guide, Accessor Search Implementation 
Details)  says that the pattern for setValue:forKey:

        • The receiver’s class is searched for an accessor method whose name 
matches the pattern -set<Key>:.

So the question is "what does 'searched' mean"?  Since that document talks 
about method names that match certain patterns, I'm guessing that it walks the 
method table (instead of calling respondsToSelector:).

I'd just override valueForKey: and setValue:forKey: in your class to handle 
forwarding those to your wrapped object.


Glenn Andreas                      [email protected] 
The most merciful thing in the world ... is the inability of the human mind to 
correlate all its contents - HPL

_______________________________________________

Cocoa-dev mailing list ([email protected])

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