NSWindowController 是否支持 encodeRestorableState()?
Is encodeRestorableState() supported in NSWindowController?
我这辈子都想不通。我想我已尽一切努力让 encodeRestorableState(with:)
方法在我的 NSWindowController
子类中被调用,但它就是没有。
在这上面花了几个小时后,我认为它实际上可能根本不受支持。那么this piece of documentation是什么意思呢?
请注意,它说 使用 方法而不是 overriding/implementing 方法。也许那是我弄错的地方。
更新
进一步挖掘,我发现我在 NSWindowController
子类中创建的 window 的 windowController
属性 设置为 nil
。我想这就是 window 不告诉控制器对其状态进行编码的原因。我现在弄明白为什么是 nil
.
尝试为您的 NSViewController/NSWindowController 子类调用 invalidateRestorableState()
。稍后将调用 encodeRestorableState(with:)
。
终于想通了。基本上,这就是我在 AppDelegate
:
中创建 window 控制器的方式
MainWindowController().showWindow(self)
我没有保留对 window 控制器实例的任何引用,并且由于 NSWindow
的 windowController
属性 是 weak
,window 正在释放控制器。这就是导致许多问题的原因,包括这个问题中的那个。我也因此遇到了其他问题。
我这辈子都想不通。我想我已尽一切努力让 encodeRestorableState(with:)
方法在我的 NSWindowController
子类中被调用,但它就是没有。
在这上面花了几个小时后,我认为它实际上可能根本不受支持。那么this piece of documentation是什么意思呢?
请注意,它说 使用 方法而不是 overriding/implementing 方法。也许那是我弄错的地方。
更新
进一步挖掘,我发现我在 NSWindowController
子类中创建的 window 的 windowController
属性 设置为 nil
。我想这就是 window 不告诉控制器对其状态进行编码的原因。我现在弄明白为什么是 nil
.
尝试为您的 NSViewController/NSWindowController 子类调用 invalidateRestorableState()
。稍后将调用 encodeRestorableState(with:)
。
终于想通了。基本上,这就是我在 AppDelegate
:
MainWindowController().showWindow(self)
我没有保留对 window 控制器实例的任何引用,并且由于 NSWindow
的 windowController
属性 是 weak
,window 正在释放控制器。这就是导致许多问题的原因,包括这个问题中的那个。我也因此遇到了其他问题。