Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何以编程方式监视KVC对象?_Objective C_Xcode_Macos_Key Value Observing_Key Value Coding - Fatal编程技术网

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

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

我试图通过代码监视NSMutableArray的更改。我想在数组更改时添加一个观察者,但我不知道NotificationName应该是什么来实现这一点


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

我不是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
不兼容。当然,文档会告诉你哪些是哪些