Cocoa NSBundle loadNibNamed已弃用

时间:2015-07-22 14:09:59

标签: cocoa deprecated loadnibnamed

我正在开发Cocoa App,我注意到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。

1 个答案:

答案 0 :(得分:0)

您应用中的window属性是否委托了类weak?如果是,请参阅this answer。您现在使用的未弃用方法要求控制器具有对顶级对象的强引用。