我正在构建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及其动作。通常与IB的iOS相同。当我不绑定IBAction时,我不会得到EXC_BAD_ACCESS

最佳答案

终于解决了,在主窗口中添加了childWindowController之后,我在appDelegate方法中释放了它。但是我不明白为什么我不能释放它……


因为您拥有窗口控制器,并且窗口控制器拥有其窗口。窗口没有使它的控制器保持活动状态。你是。而且当您不在时,它会从可能要与之交谈的所有内容中消失,例如将其作为目标的按钮。

更一般而言,试图将您的所有权责任转移到其他对象上(例如,期望一个窗口为您拥有其WC)是在询问内存管理错误。

(我唯一的例外是通过集合间接拥有对象:例如,如果我拥有一个堆满东西的数组,那么我不会在进出途中分别保留和释放每个Thing。除此之外,我希望它比我更聪明)


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


我不明白你的意思。

关于objective-c - 在NSWindowController上按下NSButton时EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14386983/

10-08 23:18