我正在尝试通过代码监视NSMutableArray以进行更改。我希望在数组发生变化时添加一个观察者,但是我没有看到NotificationName应该是什么来实现这一点。
基本上,当修改数组时,我想执行一个自定义选择器。
答案 0 :(得分:5)
我不是100%,但我很确定Key-Value Observing就是你想要的。
无论是什么对象关心数组都将自己注册为观察者:
[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"];
任意框架类将具有一些属性,并且某些属性不符合Key-Value Observing。例如,NSWindow
的{{1}} 符合 KVO,但firstResponder
不符合。当然,文档会告诉你哪些是哪个。