Objective c 如何以编程方式监视KVC对象?
我试图通过代码监视NSMutableArray的更改。我想在数组更改时添加一个观察者,但我不知道NotificationName应该是什么来实现这一点Objective c 如何以编程方式监视KVC对象?,objective-c,xcode,macos,key-value-observing,key-value-coding,Objective C,Xcode,Macos,Key Value Observing,Key Value Coding,我试图通过代码监视NSMutableArray的更改。我想在数组更改时添加一个观察者,但我不知道NotificationName应该是什么来实现这一点 基本上,当修改数组时,我想执行一个自定义选择器。我不是100%,但我很确定这就是您想要的 关心阵列的任何对象都会将自身注册为观察者: [objectWithArray addObserver:self forKeyPath:@"theArray" options:NS
基本上,当修改数组时,我想执行一个自定义选择器。我不是100%,但我很确定这就是您想要的 关心阵列的任何对象都会将自身注册为观察者:
[objectWithArray addObserver:self
forKeyPath:@"theArray"
options:NSKeyValueObservingOptionNew
context:nil];
然后,它将收到阵列已更改的通知:
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
NSLog(@"Change is good: %@", [change objectForKey:NSKeyValueChangeNewKey]);
}
请注意,此方法将收集此对象已注册的所有观察结果。如果您注册同一个对象以观察许多不同的键,则在调用此方法时可能必须区分它们;这就是keyPath
和object
参数的用途
问题是,我不确定这是否适用于您的原因是,这假设数组在您的代码中,因为您需要包装对它的访问才能发送通知
[self willChangeValueForKey:@"theArray"];
[theArray addObject:...];
[self didChangeValueForKey:@"theArray"];
一个任意的框架类将有一些属性是键值兼容的,而有些属性不是键值兼容的。例如,NSWindow
的firstResponder
与KVO兼容,但其childWindows
不兼容。当然,文档会告诉你哪些是哪些