4

我想通過代碼監視NSMutableArray的更改。每當數組發生更改時,我都想添加一個觀察器,但我沒有看到NotificationName應該是什麼來實現這一點。如何以編程方式監視KVC對象?

基本上,當數組被修改時,我想執行一個自定義選擇器。

回答

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]); 
} 

注意,此的一種方法將收集全部該對象已註冊的觀察結果。如果你註冊了同一個對象來觀察許多不同的鍵,當這個方法被調用時,你可能必須區分它們;這就是keyPathobject參數的用途。

問題以及我不確定這是否適用於您的原因是,這是因爲您需要包裝對該通道的訪問權限才能發送通知。

[self willChangeValueForKey:@"theArray"]; 
[theArray addObject:...]; 
[self didChangeValueForKey:@"theArray"]; 

任意框架類將具有一些屬性,並且其中一些屬性不符合鍵值觀察。例如,NSWindowfirstResponder KVO兼容,但它的childWindows不是。文檔當然會告訴你哪個是哪個。

相關問題