Swift macos模态新窗口、windowController';在其contentView';那是什么?

Swift macos模态新窗口、windowController';在其contentView';那是什么?,swift,macos,nsviewcontroller,nswindowcontroller,Swift,Macos,Nsviewcontroller,Nswindowcontroller,我有一个使用脚本的macos应用程序,脚本中有两个窗口 如果我单击第一个窗口上的按钮,它将切换到第二个窗口,但我发现新窗口的contentView首先加载,然后是窗口加载。这怎么可能 代码如下: +-----------+ +------------+ | | | | | Window A | | Window B | | | | | +-----+-----+

我有一个使用脚本的macos应用程序,脚本中有两个窗口

如果我单击第一个窗口上的按钮,它将切换到第二个窗口,但我发现新窗口的contentView首先加载,然后是窗口加载。这怎么可能

代码如下:

+-----------+      +------------+
|           |      |            |
|  Window A |      | Window B   |
|           |      |            |
+-----+-----+      +-----+------+
      v                  v
+-----+-----+      +-----+-------
| View A    |      | View B     |
|           |      |            |
| buttonA   |      | property   |
+-----------+      +------------+


代码:

在文件中:

// WindowBWindowController.swift

class WindowBWindowController: NSWindowController {

    override func windowDidLoad() {
        super.windowDidLoad()

        // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.

      print("windowDidLoad")
    }
}

当我单击按钮时,视图将显示,但我先有viewDidLoad,然后是windowDidLoad,这对我来说是违反直觉的,应该先有一个窗口,然后是视图。

加载视图是加载窗口的一部分<代码>windowDidLoad在加载窗口nib文件(包括视图)时被调用。@Willeke谢谢,我想我在某个地方读到窗口将根据需要加载,也许这解释了为什么窗口加载晚于视图。如果调用[super viewDidLoad],您应该可以安全地请求视图的窗口。此外,苹果工程师喜欢调用“ViewDidMoveToWindows”来查看是否有有效的窗口。加载视图是加载窗口的一部分<代码>windowDidLoad在加载窗口nib文件(包括视图)时被调用。@Willeke谢谢,我想我在某个地方读到窗口将根据需要加载,也许这解释了为什么窗口加载晚于视图。如果调用[super viewDidLoad],您应该可以安全地请求视图的窗口。苹果的工程师们也喜欢打电话给“ViewDidMoveToWindows”,看看你是否有一个有效的窗口。
// WindowBWindowController.swift

class WindowBWindowController: NSWindowController {

    override func windowDidLoad() {
        super.windowDidLoad()

        // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.

      print("windowDidLoad")
    }
}
// ViewBViewController.swift
class ViewBViewController: NSViewController {
  override func viewDidLoad() {
    print("viewDidLoad")
  }
}