Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用cocoa将按钮从另一个类分配到当前类选择器_Objective C_Cocoa - Fatal编程技术网

Objective c 使用cocoa将按钮从另一个类分配到当前类选择器

Objective c 使用cocoa将按钮从另一个类分配到当前类选择器,objective-c,cocoa,Objective C,Cocoa,我实例化一个类,然后尝试更改实例化类按钮的选择器: WebViewController *newtab = [[WebViewController alloc] initWithNibName:@"NavigatorNoBottom" bundle:nil]; [[newtab tabsButton]setAction:@selector(addtabs:)]; 按钮选项卡button是WebViewController类的一个出口,该类在interface builder中直接链接。 方法

我实例化一个类,然后尝试更改实例化类按钮的选择器:

WebViewController *newtab = [[WebViewController alloc] initWithNibName:@"NavigatorNoBottom" bundle:nil];
[[newtab tabsButton]setAction:@selector(addtabs:)]; 
按钮选项卡button是WebViewController类的一个出口,该类在interface builder中直接链接。 方法-voidAddtabs:idsender是我当前类中的一个方法

但这段代码似乎不起作用,我的按钮在这里,但当我点击它时,它什么也不起作用

如果你需要更多的背景,不要犹豫。我知道这可能很简单,但我只是对它着迷

注意-initWithNibName:bundle:不会立即加载nib文件。这意味着,在发送之后,您不能期望设置您的出口

在发送-setAction:的那一行中,您的tabsButton出口可能为零

如果WebViewController继承自NSViewController,则可以将设置操作的行放在WebViewController类的-loadView方法中,以确保已加载nib文件并设置了所有出口:

- (void)loadView {
    [super loadView];
    [tabsButton setAction:@selector(addtabs:)];
    // or [self.tabsButton setAction:@selector(addtabs:)]; 
}
或者,如果不想在视图控制器中执行此操作,可以在任意类中执行以下操作:

WebViewController *newtab = [[WebViewController alloc] initWithNibName:@"NavigatorNoBottom"
    bundle:nil];
[newtab view];
[[newtab tabsButton]setAction:@selector(addtabs:)]; 
通过将-view发送到视图控制器,您可以强制它加载nib文件,因此选项卡按钮出口将在加载之后立即设置


请注意,您可以在任何类中设置操作,因为选择器没有绑定到类。还要注意的是,由于您没有设置目标,因此操作将遵循操作链。

我已经用类似您的代码更正了我的代码,真正的问题是目标!它现在工作得很好,非常感谢!