gpt4 book ai didi

objective-c - @selector - 如何从另一个类调用方法?

转载 作者:行者123 更新时间:2023-12-03 16:43:00 25 4
gpt4 key购买 nike

我通过 Interface Builder 创建了一个 NSMenu。菜单项之一名为showPreferencesPanel方法,该方法在KBAppController.m中定义:

-(void)showPreferencesPanel {
//something
}

现在,我必须在没有 IB 的情况下重新构建菜单...全部以编程方式进行。 StatusMenu.m 是处理所有这些的类,我无法弄清楚应该设置的目标,以便从另一个类调用方法。

创建该类的实例不起作用!菜单项呈灰色。

StatusMenu.m

KBAppController *kbAppController = [[KBAppController alloc]init];
NSMenuItem* preferencesItem;
[preferencesItem setTarget:kbAppController];
preferencesItem = [[NSMenuItem alloc] initWithTitle:@"Preferences…" action:@selector(showPreferencesPanel) keyEquivalent:@""];

已编辑:------------------------------------------ -

下面是使用 KBAppController 类的对象的更新代码。好消息是首选项菜单项已启用,但它仍然没有调用 KBAppController.m 中的方法:(

KBStatusMenu.m

@synthesize kbAppController = _kbAppController;

someMethod {
NSMenuItem* preferencesItem;
preferencesItem = [[NSMenuItem alloc] initWithTitle:@"Preferences…" action:@selector(showPreferencesPanel) keyEquivalent:@""];
[preferencesItem setTarget:self];
}

- (void)showPreferencesPanel {
NSLog(@"in 1");
[_kbAppController showPreferencesPanel];
}

KBAppController.m

-(void)showPreferencesPanel {
NSLog(@"in 2");
//something
}

最佳答案

NSMenuItem 有一个 - (void)setTarget:(id)anObject- (void)setAction:(SEL)aSelector 应该可以做到这一点。

只需确保首先设置并初始化 NSMenuItem。现在您正在对未初始化的对象调用 -setAction

preferencesItem = [[NSMenuItem alloc] initWithTitle:@"Preferences…" action:@selector(showPreferencesPanel) keyEquivalent:@""];
[preferencesItem setTarget:kbAppController]

关于objective-c - @selector - 如何从另一个类调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12099796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com