You cannot use a C function as the action for an NSButton
. The button requires a target which is an object and the selector for a method on that target. If there's no target, there must still be an object in your window's responder chain that will respond to the selector.
You must create an object (doesn't have to be an instance; you can use a class object if you so choose) in order for the button to operate. The method also needs to have a particular signature: it must take one argument, which will be the button when it's called.
If you must use the function you've already written, you will have to write an ObjC class that calls through to it from the action method:
#import <Cocoa/Cocoa.h>
@interface ButtonPasser : NSObject
+ (IBAction)buttonPassthrough:(id)sender;
@end
@implementation ButtonPasser
+ (IBAction)buttonPassthrough:(id)sender
{
buttonClick();
}
@end
void start(void){
...
NSRect buttonFrame = NSMakeRect(59, 33, 82, 32);
NSButton *button = [[NSButton alloc] initWithFrame:buttonFrame];
[button setTarget:[ButtonPasser class]];
[button setAction:@selector(buttonPassthrough:)];
...
}
This uses the class object and a class method, since I'm not sure what you would do with an instance after you created it. Using an instance would be much more usual, however.