macos - NSWindowController orderOut 在 Mac Yosemite 10.10 中崩溃

标签 macos cocoa osx-yosemite

以下代码适用于 Mavericks (10.9),但一旦我升级到 Yosemite 10.10,它就会崩溃。克服纸张超标的最佳方法是什么?

我的类(class)有一名成员:

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] 行现在在 Yosemite 崩溃了!而且这段代码已经工作了好几年了!解决这个问题的最佳方法是什么?

谢谢!

尼利

最佳答案

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

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

仍然不知道苹果在 OSX 10.10 中与 10.9 相比发生了什么变化,可能是一些内存优化。在 10.10 发行说明和博客中都没有找到任何相关线索。无论如何,这段代码更适合释放窗口。

关于macos - NSWindowController orderOut 在 Mac Yosemite 10.10 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26510437/

相关文章:

python - matplotlib 1.3.1 要求 numpy>=1.5,但您将拥有不兼容的 numpy 1.8.0rc1

python - 没有为 OS [osx] 定义 [python-wxtools]

macos - MonoDevelop 的 ~/.config/MonoDevelop/在哪里

objective-c - 如何检查 Cocoa 和 Objective-C 中是否存在文件夹?

qt - 无法更改自定义QListView行的突出显示的文本颜色

r - ‘seewave’安装错误 “' sndfile.h’文件未找到”(适用于 OSX Yosemite 下的 R 3.2.0)

objective-c - OS X Lion 中类似邮件的收藏夹栏

objective-c - Cocoa 应用示例

cocoa 绑定(bind) : Update NSObjectController manually?

javascript - OS X Yosemite JavaScript for Automation的XML解析语法?