我正在构建一个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
。
答案 0 :(得分:2)
它终于得到了解决,我在appDelegate方法上发布了childWindowController,然后在主窗口上添加它。但我不明白为什么我不能释放它...
因为您拥有窗口控制器,并且窗口控制器拥有其窗口。窗口没有使控制器保持活动状态; 你是。当你不是这样的时候,它会从任何可能想要与之交谈的东西中消失,例如以它为目标的按钮。
更一般地说,试图摆脱对其他对象的所有权责任 - 例如,期望一个窗口为你拥有自己的WC - 就是要求内存管理错误。
(我唯一的例外是通过集合间接拥有对象:如果我拥有,比如说,一个充满了东西的数组,我不会保留并单独释放每个东西进出。还有别的,我期待的要超越我。)
因为它是AppDelegate上的childWindowController的本地实例(仅用于上面的添加)?
我不明白你的意思。