NSWindowController orderOut在Mac Yosemite 10.10崩溃

时间:2014-10-22 14:51:37

标签: macos cocoa osx-yosemite

以下代码适用于Mavericks(10.9),但是一旦我升级到优胜美地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]行现在正在Yosemite中崩溃!这段代码已经工作了好几年了!解决这个问题的最佳方法是什么?

谢谢!

Nili

1 个答案:

答案 0 :(得分:2)

解决方案是替换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发行说明和博客中找到任何相关线索。无论如何这个代码更适合发布Windows。