The following code:
- (void) setTarget:(id)anObject {
NSLog(@"anObject: %@",anObject);
[super setTarget:anObject];
NSLog(@"Target: %@",[self target]);
}
has this output:
anObject: <DropZoneViewController: 0x15dd5770>
Target: (null)
This is in a subclass of NSControl. So what am I doing wrong?
What I'm trying to achieve: I have an NScontrol that accepts dragging objects. When the dragging ends, I'd like to send the control's action to its target. But how do I get the control's action & target if this above doesn't work?
NSControl
doesn’t store it’s own target, that is what it’s cell is supposed to do.
So there are two reasons this might fail:
Your control doesn’t have a cell
In this case you really should create a subclass of NSActionCell
to implement your control. Your subclass of NSControl
shouldn’t do much besides setting up the cell.
If you don’t want to do it the right way by using a NSCell
you’ll have to add instance variables to your NSControl
subclass to store the target and action and override the getters and setters to use them.
Your cell is not a subclass of NSActionCell
. A regular NSCell
doesn’t store a target either.
If you’re using a custom cell that is not a subclass of NSActionCell
just change it so that it does inherit from NSActionCell
instead of NSCell
. If you cannot do this (for example because you’re subclassing a NSCell
subclass you cannot change) you’ll have to add the instance variables for target and selector to your cell class and override it’s setters and getters.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With