gpt4 book ai didi

objective-c - NSWIndowController 创建 Nib 加载的 Outlets 序列

转载 作者:行者123 更新时间:2023-12-03 17:03:39 24 4
gpt4 key购买 nike

我在使用包含 NSWindowController(作为文件所有者)以及绑定(bind)到 Nib 中文件所有者的 ArrayController 的 Nib 时遇到了大麻烦。

子类化的 NSWindowController 看起来没问题,但是 Nib 内的 NSObjectController、NSArrayController 和“自定义”NSObject 在 Nib 加载后都设置为 0x0。

所有 Controller 和对象都在 IB 中正确“绑定(bind)”。 NSObject 子类有一个 initWithCoder。对 inits 或 awake 是否还有进一步的要求?我不应该认为所有 init 本质上什么都不做,而是返回 super。那是因为所有引用的对象都在 Nib 内设置(绑定(bind))。

看来和 Nib 加载的顺序有关。而且,我被引导相信 IBOutlets 在 awakeFromNib 之前可用,遵循 [super initWithWindowNibName:name];

根据文档,

In Mac OS X v10.5 and later, setting an outlet also generates a key-value observing (KVO) notification for any registered observers. These notifications may occur before all inter-object connections are reestablished and definitely occur before any awakeFromNib methods of the objects have been called.

此外,

If you need to configure the objects in your nib file further at load time, the most appropriate time to do so is after your nib-loading call returns. At that point, all of the objects are created, initialized, and ready for use.

我是否错误地认为 self = [super initWithWindowNibName:name] 是我的 nib-loading 调用?

我的一些 awakeFromNib 仅在显示窗口时才会被调用。 IE。 [myWindowController showWindow: nil]; 我的窗口作为一个进行阻塞调用的工作表打开,因此在 showWindow 之后访问这些数组 Controller 并不容易。

最佳答案

Am I wrong to believe that self = [super initWithWindowNibName:name] is my nib-loading call?

-[NSWindowController loadWindow] 是实际加载 Nib 的方法。并不是说您应该直接调用它;而是应该直接调用它。 -[NSWindowController window] 是您应该调用的,因为后者调用 -[NSWindowController windowWillLoad]-[NSWindowController windowDidLoad] 作为好吧。

NSWindowController 的文档指出:

Although a window controller can manage a programmatically created window, it usually manages a window in a nib file. The nib file can contain other top-level objects, including other windows, but the window controller’s responsibility is this primary window.

这样做的结果是,在加载其中的窗口之前, Nib 中的不会加载任何内容。

这是一个“陷阱”,曾经困扰过我几次!

关于objective-c - NSWIndowController 创建 Nib 加载的 Outlets 序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16995049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com