【问题标题】:NSWindowController orderOut crashes in Mac Yosemite 10.10NSWindowController orderOut 在 Mac Yosemite 10.10 中崩溃
【发布时间】:2014-10-23 22:53:04
【问题描述】:

以下代码在 Mavericks (10.9) 上运行良好,但是一旦我升级到 Yosemite 10.10,它就会崩溃。什么是最好的方法来克服过度的床单?

我的班级有一个成员:

EmailClientWindowController* emailClientSheet;

(而 EmailClientWindowController : NSWindowController)

单击某个按钮后,我将窗口显示为模态表:

self.emailClientSheet = [[EmailClientWindowController alloc] initWithDocument:document];
[NSApp beginSheet:self.emailClientSheet.window modalForWindow:self.view.window modalDelegate:self
       didEndSelector:@selector(didEndSheet:returnCode:contextInfo:) contextInfo:nil];

它的didEndSheet方法如下:

- (void)didEndSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
{
    self.emailClientSheet = nil;
    [sheet orderOut:self];
}

但是,[sheet orderOut:self] 行现在在优胜美地崩溃了!这段代码已经工作了好几年了!解决此问题的最佳方法是什么?

谢谢!

尼莉

【问题讨论】:

  • 试试[sheet close]吧?
  • 同样的崩溃也发生在那里。

标签: macos cocoa osx-yosemite


【解决方案1】:

解决办法是替换nil赋值的顺序和orderOut。含义:

- (void)didEndSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
{
    [sheet orderOut:self];
    self.emailClientSheet = nil;
}

仍然没有弄清楚 Apple 在 OSX 10.10 中与 10.9 相比有何变化,可能是一些内存优化。在 10.10 发行说明和博客中没有找到任何相关线索。无论如何,这段代码更适合发布窗口。

【讨论】:

    猜你喜欢
    • 2014-11-10
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 2015-04-14
    • 2015-07-26
    • 1970-01-01
    相关资源
    最近更新 更多