知道我来自 iOS 背景并且这是我的第一个 OS X 项目可能会有所帮助。
在我的项目中,我有一个 NSView 子类和一个 NSViewController 并在控制器中加载视图。
- (void)loadView
{
    StartView *view = [StartView alloc] initWithFrame:frame]; // frame exists
    self.view = view;
}
该视图具有我添加的NSButton- 属性。btnNewinitWithFrame:
- (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存在。
难道我做错了什么?或者我应该真正听取视图中的点击并使用委托或通知(我猜不是?)