0

当我尝试设置对这个特定键的观察时,没有任何反应。这就是我的意思。

我有一个标准的 Cocoa 应用程序,带有一个 NSTableView,我想出了如何根据选择的单元格更改图像视图中显示的图像。

现在,我试图弄清楚如何通过选定的索引禁用/启用按钮。我的意思是,我在窗口中有一个按钮,该按钮在某些索引上被禁用。

SomeClass 的 init 方法

-(id)init {
    if (self=[super init]) {
        [arrayController addObserver:self forKeyPath:@"selectionIndex" options:NSKeyValueObservingOptionNew context:NULL];
    }
}

但是,当我实现 observeValueForKeyPath: 方法时,当我选择新索引时,并没有获取更改。事实上,如果我尝试记录出口,出口会显示 (null)。但是,当我在 AppDelegate 中添加观察者时,AppDelegate(当指定为观察者时)会获取更改。

我的通用 SomeClass 对象没有某些原因吗?应该以不同的方式完成吗?

笔记:

我尝试将 SomeClass 子类化为 NSWindow,然后创建窗口的所有者 SomeClass,并在 awakeFromNib 中设置观察者,这可行,但似乎是一种不好的方法。

4

1 回答 1

4

init方法在过程中发生得太早,在连接插座之前(我认为)。将代码放入awakeFromNib将正常工作。这来自NSObject类参考中的 Apple 文档:

nib 加载基础结构向awakeFromNib 从 nib 存档重新创建的每个对象发送一条消息,但前提是存档中的所有对象都已加载和初始化。当一个对象收到一条awakeFromNib消息时,它保证已经建立了它的所有出口和动作连接。

于 2012-08-07T02:39:20.233 回答