4
我想通過代碼監視NSMutableArray的更改。每當數組發生更改時,我都想添加一個觀察器,但我沒有看到NotificationName應該是什麼來實現這一點。如何以編程方式監視KVC對象?
基本上,當數組被修改時,我想執行一個自定義選擇器。
我想通過代碼監視NSMutableArray的更改。每當數組發生更改時,我都想添加一個觀察器,但我沒有看到NotificationName應該是什麼來實現這一點。如何以編程方式監視KVC對象?
基本上,當數組被修改時,我想執行一個自定義選擇器。
我不是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"];
任意框架類將具有一些屬性,並且其中一些屬性不符合鍵值觀察。例如,NSWindow
的firstResponder
是 KVO兼容,但它的childWindows
不是。文檔當然會告訴你哪個是哪個。