【问题标题】:Cocoa NSBundle loadNibNamed deprecatedCocoa NSBundle loadNibNamed 已弃用
【发布时间】:2015-07-22 14:09:59
【问题描述】:

我正在开发一个 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。

【问题讨论】:

    标签: cocoa deprecated loadnibnamed


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答。我错过了窗口属性部分。现在一切正常。 ?
    猜你喜欢
    • 2010-12-14
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2012-09-22
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    相关资源
    最近更新 更多