【发布时间】:2012-08-23 20:51:23
【问题描述】:
我通过 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 类对象的更新代码。好消息是启用了 prefs 菜单项,但它仍然没有调用 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
}
【问题讨论】:
-
这会打印出什么吗?
-
是的,它到达“in 1”,但永远不会到“in 2”。 _kbAppController 为空!我删除了属性和@synthesize 语句,它现在可以工作了。
标签: objective-c cocoa