我正在开发一个可可应用程序,我注意到NSBundle loadNibNamed是不推荐的。
我试图使用一个工作表来显示一些配置选项。我使用的是一个AppController,而Config表是一个单独创建的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;
}跳过不推荐的行后,需要做什么才能正确地关闭配置表?
我在运行约塞米蒂和Xcode 6.4。
发布于 2015-07-23 03:59:09
应用程序委托类中的window属性是weak吗?如果是,请参见this answer。您现在使用的不建议使用的方法要求您的控制器具有对顶级对象的强引用。
https://stackoverflow.com/questions/31565586
复制相似问题