Swift 使用单个窗口的基于文档的应用程序
我有一个基于文档的macOS应用程序,它是一个基本的文本编辑器。默认行为是为每个打开的文档创建一个新窗口。但我希望一次只显示一个窗口,在打开文档或创建新文档时,这应该发生在同一个窗口中,从而替换旧文档 我试着在Swift 使用单个窗口的基于文档的应用程序,swift,macos,nsdocument,document-based,nsdocumentcontroller,Swift,Macos,Nsdocument,Document Based,Nsdocumentcontroller,我有一个基于文档的macOS应用程序,它是一个基本的文本编辑器。默认行为是为每个打开的文档创建一个新窗口。但我希望一次只显示一个窗口,在打开文档或创建新文档时,这应该发生在同一个窗口中,从而替换旧文档 我试着在NSDocument中的makeWindowController方法中进行一些黑客攻击,方法是不实例化新的窗口控制器,而是重用旧的窗口控制器。但在这种方法出现一些问题后,我认为这不是正确的方法。我想知道是否有一个共同的方法来解决这个问题 这是我试过的代码 class Document: N
NSDocument
中的makeWindowController
方法中进行一些黑客攻击,方法是不实例化新的窗口控制器,而是重用旧的窗口控制器。但在这种方法出现一些问题后,我认为这不是正确的方法。我想知道是否有一个共同的方法来解决这个问题
这是我试过的代码
class Document: NSDocument {
static var sharedWindow: NSWindowController?
override func makeWindowControllers() {
// Instaniate window controller there is none
if Document.sharedWindow == nil {
// Returns the Storyboard that contains your Document window.
let storyboard = NSStoryboard(name: NSStoryboard.Name("Main"), bundle: nil)
Document.sharedWindow = storyboard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier("Document Window Controller")) as? NSWindowController
}
guard let sharedWindow = Document.sharedWindow else { return }
if let previousDocument = sharedWindow.document as? NSDocument {
previousDocument.close()
}
self.addWindowController(sharedWindow)
sharedWindow.contentViewController?.representedObject = content
(sharedWindow.contentViewController as? ViewController)?.handleOpenDocumentOperation()
}
...
}
谢谢,我已经尝试过这个解决方案并更新了我的问题。问题是,现在当新文档(尚未保存)发生更改时,有关这些未保存更改的警告表不会出现。相反,新窗口只是显示出来。同样的,已经保存的文件有未保存的更改。警报表不显示,自动保存也不起作用。当我添加
previousDocument.save(self)
时,保存的文件将被保存。对于未保存的文件,将显示警报表,但新窗口会立即取消警报。