Re: setting target and action for a NSSlider programmatically in a class that is not "file's owner" - how?
Re: setting target and action for a NSSlider programmatically in a class that is not "file's owner" - how?
- Subject: Re: setting target and action for a NSSlider programmatically in a class that is not "file's owner" - how?
- From: Rua Haszard Morris <email@hidden>
- Date: Fri, 16 May 2008 14:52:26 +1200
Aha!!
Exactly, the self is not what I thought it was ... I understood the +
was a class method, and kinda ignored the strange use of self.
(I have only recently become aware that there is a 'self' in an
instance method incidentally...)
thanks for the help
Rua HM.
On May 16, 2008, at 2:38 PM, Sherm Pendley wrote:
On Thu, May 15, 2008 at 10:12 PM, Rua Haszard Morris <email@hidden
> wrote:
I'm trying to set the action for an NSSlider in a little helper
class that is not the "file's owner" class associated with the
window in the nib. At runtime, I get these console messages:
*** +[SliderHelper myAction:]: unrecognized selector sent to class
0xeb74380
HIToolbox: ignoring exception '*** +[SliderHelper myAction:]:
unrecognized selector sent to class 0xeb74380' that raised inside
Carbon event dispatch
This is how I'm setting this up:
- there's an NSObject subclass (call it MyDialog) containing
IBOutlets for all the controls I care about.
- there's another NSObject subclass (call it SliderHelper) which is
intended to automate some behaviour common to a few controls in the
dialog (and other dialogs in future)
- MyDialog instantiates a SliderHelper and passes it an NSSlider*
outlet referring to a slider
- SliderHelper sets up the target and action for the slider
programmatically in an +initWithSlider: method..
+(id) initTestSlider:(NSSlider*)aSlider {
SliderHelper* newOne = [[SliderHelper alloc] init];
[newOne setSlider:aSlider];
[[newOne slider] setTarget:self];
-init* is always an instance method, and always called as part of a
[[Foo alloc] initBlah] pair. Above, you're passing a Class object to
setTarget, but targets must be instances - hence the "unrecognized
selector" error when you try to send the action to the target.
I would write it like this:
-(id) initWithSlider:(NSSlider*)aSlider {
if ((self = [super init])) {
[aSlider setTarget:self];
[aSlider setAction:@selection(myAction:)];
[self setSlider:aSlider];
}
return self;
}
You should review the Cocoa Fundamentals Guide - especially the
section about object creation:
<http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/chapter_3_section_6.html
>
sherm--
--
Cocoa programming in Perl: http://camelbones.sourceforge.net
_______________________________________________
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