我正在开发一个Cocoa应用程序,我注意到NSBundle loadNibNamed已被弃用。
我试图使用一个表来显示一些配置选项。我使用的是一个AppController,而配置表是一个单独创建的NIB。
这是我的代码。
- (IBAction)showConfig:(id)sender{
if (!_config) {
[NSBundle loadNibNamed:@"Config" owner:self];
}
[NSApp beginSheet:self.config modalForWindow:[[NSApp delegate] window] modalDelegate:self didEndSelector:NULL contextInfo:NULL];
}
使用该代码,配置表可以完美地打开和关闭。
当我将这个[NSBundle loadNibNamed:@"Config" owner:self];
切换到[[NSBundle mainBundle] loadNibNamed:@"Config" owner:self topLevelObjects:nil];
时,配置表仍然工作正常。
我真正的问题是当我想要关闭它。应用程序崩溃并抛出以下错误:
Thread 1:EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
这是我的IBAction来关闭配置表。
- (IBAction)closeConfig:(id)sender{
[NSApp endSheet:self.config];
[self.config close];
self.config = nil;
}
一旦我跳过弃用的行,我需要做什么才能正确关闭配置表?
我正在运行Yosemite和Xcode 6.4
是window
属性在你的应用程序委托类weak
?如果有,请看下面的答案。您现在正在使用的未弃用方法要求您的控制器具有对顶级对象的强引用。