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

标签 cocoa nsopenpanel nssavepanel

当我使用 beginWithCompletionHandler: 打开 NSSavePanelNSOpenPanel 实例时,处理程序永远不会被调用。相反,我看到该面板出现了不到一秒钟,然后又消失了,并且不允许用户选择文件。当我使用 runModal 打开面板时,它工作得很好。代码如下:

NSSavePanel *savePanel = [NSSavePanel savePanel];

//[savePanel runModal]; // Works

[savePanel beginWithCompletionHandler:^(NSInteger result){

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

我这里有什么遗漏的吗?

谢谢,马克

最佳答案

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

关于cocoa - 完成处理程序从未调用 NSSavePanel beginWithCompletionHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5456085/

相关文章:

cocoa - 在 NSTableView 中自动保存以编程方式创建的 NSTableColumn?

objective-c - Cocoa 按钮在应用程序外部启动

swift - NSOpenPanel 作为工作表

objective-c - 完成处理程序 block 内的 NSSavePanel nil

macos - NSSavePanel 在优胜美地崩溃

Cocoa Webkit 错误?

xcode - 在 Cocoa OS X 中选择 NSTableView 中的单元格时会调用哪个方法?

cocoa - NSSavePanel 取消确认

iOS ACEDrawingView 无法设置 RGB 颜色,只能设置默认的 UIColor 值

objective-c - NSOpenPanel 和检测到泄漏的观察者