如何以编程方式监视KVC对象?

Dav*_*vid 4 macos xcode objective-c key-value-observing key-value-coding

我正在尝试通过代码监视NSMutableArray以进行更改.我想在数组更改时添加一个观察者,但是我没有看到NotificationName应该是什么来实现这一点.

基本上,当修改数组时,我想执行自定义选择器.

Jos*_*ell 5

我不是100%,但我很确定Key-Value Observing就是你想要的.

无论关心数组的对象是什么,都将自己注册为观察者:

[objectWithArray addObserver:self 
                  forKeyPath:@"theArray"
                     options:NSKeyValueObservingOptionNew 
                     context:nil];
Run Code Online (Sandbox Code Playgroud)

然后它会收到数组已更改的通知:

- (void)observeValueForKeyPath:(NSString *)keyPath 
                      ofObject:(id)object 
                        change:(NSDictionary *)change 
                       context:(void *)context {

    NSLog(@"Change is good: %@", [change objectForKey:NSKeyValueChangeNewKey]);
}
Run Code Online (Sandbox Code Playgroud)

请注意,这一方法将收集此对象已注册的所有观察结果.如果您注册相同的对象以观察许多不同的键,则在调用此方法时,您可能必须区分它们; 这是keyPathobject论点的目的.

问题,以及我不确定这是否适合您的原因是,这假定数组在您的代码中,因为您需要对它进行包装以便发送通知.

[self willChangeValueForKey:@"theArray"];
[theArray addObject:...];
[self didChangeValueForKey:@"theArray"];
Run Code Online (Sandbox Code Playgroud)

任意框架类将具有一些属性,并且一些属性不符合Key-Value Observing.例如,NSWindowfirstResponder 国际志愿者组织兼容的,但它childWindows不是.当然,文档会告诉你哪些是哪些.