我正在构建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/