[英]Observe value changes of NSDictionary inside NSArray
這是我的NSArray
carType (
{
isSelected = 0;
kFieldName = "All types";
kObjectValue = 0;
kObjectValueText = All;
},
{
isSelected = 0;
kFieldName = "4 seats";
kObjectValue = 4;
kObjectValueText = "4 seats";
},
{
isSelected = 1;
kFieldName = "7 seats";
kObjectValue = 7;
kObjectValueText = "7 seats";
}
)
如何觀察isSelected
字段的變化? 我在我的代碼中使用了KVO,但它不起作用。
carType
是context
的NSArray
屬性
- (void)viewDidLoad
{
[super viewDidLoad];
[context addObserver:self forKeyPath:@"carType" options:NSKeyValueObservingOptionNew context:NULL];
}
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"carType"]) {
NSLog(@"carType changed");
}
}
//dealloc remove observer
要觀察數組中每個字典的isSelected
更改,您必須注冊為數組中每個字典的觀察者。 正如我在書中所說:
您可以使用NSArray的實例方法
addObserver:toObjectsAtIndexes:forKeyPath:options:context:
有效地執行此addObserver:toObjectsAtIndexes:forKeyPath:options:context:
,但是如果數組本身是可變的,那么您還必須使用隨后添加到其中的任何新詞典注冊該鍵。 array(從數組中刪除字典時取消注冊)。
最后一部分可能會變得非常艱巨。 在許多情況下,最好完全放棄,只使用一個自定義類,它在發生變異時發出通知(而不是NSDictionary,而不是KVO)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.