在NSWindowController上按下NSButton时的EXC_BAD_ACCESS

时间:2013-01-17 19:51:34

标签: objective-c macos cocoa nsbutton nswindowcontroller

我正在构建一个Mac应用程序。我正在向childWindowController添加mainWindow。在我的childWindowController中,我有几个按钮,其动作在IB中连接。但是当我按下NSButton时,应用程序崩溃,我在终端中收到EXC_BAD_ACCESS消息。我也尝试过执行setTarget:self,但这根本没有帮助。

这是我的代码:applicationDidFinishLaunching

HomeWindowController *home_WindowController = [[[HomeWindowController alloc] initWithWindowNibName:@"HomeWindowController"] autorelease];<br/><br/> 
[[self window] addChildWindow:home_WindowController.window
                         ordered:NSWindowAbove];

在HomeWindowController中:

- (id)initWithWindowNibName:(NSString *)windowNibName
{
     self = [super initWithWindowNibName:windowNibName];
    if (self) {
        // Initialization code here.

    }
    return self;
}

- (void)windowDidLoad
{
    [super windowDidLoad];
}

-(IBAction)action:(id)sender 
{
    NSLog(@"------------------ ");
}

这里有什么问题?我将NSButton绑定到FileOwner及其操作。通常与iOS的IB相同。如果我不绑定IBAction,我就不会EXC_BAD_ACCESS

1 个答案:

答案 0 :(得分:2)

  

它终于得到了解决,我在appDelegate方法上发布了childWindowController,然后在主窗口上添加它。但我不明白为什么我不能释放它...

因为您拥有窗口控制器,并且窗口控制器拥有其窗口。窗口没有使控制器保持活动状态; 你是。当你不是这样的时候,它会从任何可能想要与之交谈的东西中消失,例如以它为目标的按钮。

更一般地说,试图摆脱对其他对象的所有权责任 - 例如,期望一个窗口为你拥有自己的WC - 就是要求内存管理错误。

(我唯一的例外是通过集合间接拥有对象:如果我拥有,比如说,一个充满了东西的数组,我不会保留并单独释放每个东西进出。还有别的,我期待的要超越我。)

  

因为它是AppDelegate上的childWindowController的本地实例(仅用于上面的添加)?

我不明白你的意思。