【问题标题】:XIB-instantiated Object's IBOutlet is nilXIB-instantiated Object 的 IBOutlet 为 nil
【发布时间】:2010-03-21 23:25:01
【问题描述】:

我有一个 XIB 设置,如下图所示:

alt text http://emberapp.com/jxpx777/images/interface-builder/sizes/m.png

文件的所有者是我的主窗口控制器。 XIB 还负责创建一个对象,作为MGScopeBar 视图的委托。正如您在屏幕截图中看到的那样,范围栏委托的搜索字段有一个 IBOutlet,以便它可以将其作为额外视图作为委托过程的一部分返回。

我遇到的问题是,当为附件视图查询委托对象时,IBOutletNSSearchField 为零。我相当确定这与创建对象、连接 IBOutlets 等的顺序有关,但我只是有点迷失在这个过程中我可以期望搜索字段存在的位置,以便范围栏委托人可以正确引用它。

提前感谢您的任何指点。

【问题讨论】:

    标签: cocoa nswindowcontroller iboutlet


    【解决方案1】:

    根据Apple's documentation,看起来NIB/XIB 中的所有插座都应该在该NIB/XIB 中的任何对象上调用awakeFromNib 之前连接,但是插座可能 在对象上调用init 等时不会连线。

    【讨论】:

    • 没有“可能”。插座是通过 KVC (iPhone) 或非常相似的行为 (Mac) 设置的。这只能发生在 对象已被分配 初始化之后。想想如果你正在实现 nib 加载器,你会怎么做;类似于:id instance = [[[objectClass alloc] initWithCoder:unarchiver] autorelease]; for (NSString *k in objectOutlets) [instance setValue:[objectOutlets objectForKey:k] forKey:k]; [instance awakeFromNib]; 请注意,initWithCoder: 在出口设置开始之前返回; initWithCoder: 正在运行时尚未设置任何出口。
    猜你喜欢
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多