If its a delegate you would want to check if the delegate handles
the selector with respondsToSelector and the use performSelector to
make the call. For example....
if ([delegate respondsToSelector:@selector(pointClicked:)])
[delegate performSelector:@selector(pointClicked:) withObject:
[NSValue valueWithPoint:(pt)]];
NSValue is a normal class just like any other class. KVO, and KVC
happen to use NSValue to box and unbox non object types. If you pass a
function or method an NSValue, it will receive an NSValue. Methods
like setValue:forKey: actually receive an NSValue object, but then
manually unbox the value before calling the methods indicated by the
second key argument.
Since you've declared your delegate method in a header, you can call
it directly. This eliminates the need for performSelector:withObject:,
which is probably what caused Scott to try to use NSValue.
You can now write:
if ([delegate respondsToSelector:@selector(pointClicked:)]) {
[delegate pointClicked:pt];
}
This should work. I believe the NSValue will resolve to the NSPoint
in runtime.
Scott Andrew
On Oct 15, 2008, at 2:15 PM, DKJ wrote:
I've written a subclass of NSView. It calls a method its delegate
can implement to detect mouse clicks. I've put something like this
in the header file: