可可-如何在另一个模态视图的前面显示NSSavePanel模态窗口

时间:2019-03-07 18:16:16

标签: objective-c cocoa

我正在使用可可开发基于macOS文档的应用程序。我想进行类似XCode启动的行为,即:在一个窗口中,开始一个模态视图,其控制器由viewController称为presentViewControllerAsSheet:,然后单击“下一步”按钮,显示通过运行[self saveDocument:self]来NSSavePanel。

我的代码是:

self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]
[self.contentViewController presentViewControllerAsSheet:viewController;
//...some set ups about the NSButton on the view.
//And in the method to handle the Next Button being clicked:
[self saveDocument:self];

运行应用程序后,当我单击“下一步”按钮时,没有任何反应。

1 个答案:

答案 0 :(得分:0)

我自己只是在解决这个问题。我正在从辅助控制器回叫到要保存数据的主文档类,并且尝试调用save()时未显示模式对话框。事实证明,我必须显式地回调主线程以确保显示UI:

newServerWindowController?.saveNewDocument = { remote in
    DispatchQueue.main.async {
        guard let newDoc = self.document else { return }
        newDoc.remote = remote
        newDoc.save(self)
        self.windowController?.update()
    }
}

希望这会有所帮助!