我在使用包含 NSWindowController(作为文件所有者)以及绑定到 nib 中的文件所有者的 ArrayController 的 nib 时遇到了大麻烦。
子类化的 NSWindowController 似乎没问题,但是 nib 中的 NSObjectControllers、NSArrayControllers 和“自定义”NSObjects 都设置为 0x0——在 nib 加载之后。
所有控制器和对象都在 IB 中正确“绑定”。NSObject 子类有一个initWithCoder
. 是否对 inits 或 awake 有进一步要求。我不应该说所有的 inits 基本上什么都不做,但是return super
. 那是因为所有引用的对象都在笔尖内设置(绑定)。
它似乎与笔尖加载的顺序有关。而且,我被引导相信 IBOutlets 在 awakeFromNib 之前可用,遵循 [super initWithWindowNibName:name];
根据文档,
在 Mac OS X v10.5 及更高版本中,设置插座还会为任何注册的观察者生成键值观察 (KVO) 通知。这些通知可能在重新建立所有对象间连接之前发生,并且肯定在调用对象的任何awakeFromNib方法之前发生。
而且,
如果您需要在加载时进一步配置 nib 文件中的对象,最合适的时间是在您的 nib-loading 调用返回之后。此时,所有对象都已创建、初始化并可供使用。
我错误地相信 self = [super initWithWindowNibName:name] 是我的笔尖加载调用吗?
我的一些 awakeFromNib 仅在显示窗口时才被调用。IE。[myWindowController showWindow: nil];
我的窗口作为正在阻塞调用的工作表打开,因此在 showWindow 之后访问这些数组控制器并不容易。