完成处理程序从未调用NSSavePanel beginWithCompletionHandler

时间:2011-03-28 07:54:33

标签: cocoa nsopenpanel nssavepanel

当我用NSSavePanel打开NSOpenPanelbeginWithCompletionHandler:实例时,永远不会调用处理程序。相反,我看到面板在没有让用户选择文件的情况下再次消失之前会出现一小段时间。当我用runModal打开面板时,它工作得很好。代码如下:

NSSavePanel *savePanel = [NSSavePanel savePanel];

//[savePanel runModal]; // Works

[savePanel beginWithCompletionHandler:^(NSInteger result){

    NSLog(@"DONE"); // Never called, dialog disappears right away
}];

这里有什么我想念的吗?

谢谢,Mark

1 个答案:

答案 0 :(得分:3)

发现问题:在上面的代码中,一旦周围方法结束,savePanel实例就会自动释放。这会导致面板消失。解决方案是保持面板参考,直到调用完成块。