知道我来自 iOS 背景并且这是我的第一个 OS X 项目可能会有所帮助。
在我的项目中,我有一个 NSView 子类和一个 NSViewController 并在控制器中加载视图。
- (void)loadView
{
StartView *view = [StartView alloc] initWithFrame:frame]; // frame exists
self.view = view;
}
该视图具有我添加的NSButton
- 属性。btnNew
initWithFrame:
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.btnNew = [[NSButton alloc] initWithFrame:NSRectFromCGRect(CGRectMake(350, 180, 300, 60))];
[self addSubview:self.btnNew];
}
return self;
}
在loadView:
我尝试设置动作和目标。
- (void)loadView
{
StartView *view = [StartView alloc] initWithFrame:frame]; // frame exists
[view.btnNew setTarget:self];
[view.btnNew setAction:@selector(createNew:)];
self.view = view;
}
当然,该createNew:
功能存在。
但是,单击按钮时,应用程序崩溃。当我将setTarget:
和移动setAction:
到视图中并在 上执行它们时self.btnNew
,它可以工作,但我认为这不是您应该在体面的 MVC 架构中处理事件和用户交互的方式。
我猜问题出self
在 in [view.btnNew setTarget:self];
。如果我用 抓住目标view.btnNew.target
,这是一个零对象(0x000…000)。Self
存在与view.btnNew
存在。
难道我做错了什么?或者我应该真正听取视图中的点击并使用委托或通知(我猜不是?)