UIViewController
子类上有一个属性,当视图变得可见时,该属性会发生变化。 (一组停止为空。)我已按如下方式实施KVC / KVO:
- (void)viewWillAppear:(BOOL)animated {
[self willChangeValueForKey:@"anticipatedIndexPaths" withSetMutation:NSKeyValueSetSetMutation usingObjects:_anticipatedIndexPaths];
[super viewWillAppear:animated];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
assert([_anticipatedIndexPaths count]);
[self didChangeValueForKey:@"anticipatedIndexPaths" withSetMutation:NSKeyValueSetSetMutation usingObjects:_anticipatedIndexPaths];
}
该类的子类正在观察@"anticipatedIndexPaths"
,但观察NSKeyValueChangeNewKey
时NSKeyValueChangeReplacement
的值始终为空集。是什么给了什么?
答案 0 :(得分:1)
知道了。两件事:
首先,至少对于无序的多对多关系,KVO基础设施会在willChange-:
调用中记录您的属性的值。在didChange-:
上,它仅传递给定的集合减去之前的值。其次,在viewWillAppear:
上,即使在[super viewWillAppear:]
来电之前,hidden == NO
。
就我而言,这意味着属性正在返回非空集。 KVO减法的结果是空集。
答案 1 :(得分:0)
当您致电addObserver:...
时,您是否正在通过NSKeyValueObservingOptionNew
?默认情况下,您不会获得此值。