0

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

该类的一个子类正在观察自身 for @"anticipatedIndexPaths",但NSKeyValueChangeNewKey观察时的值NSKeyValueChangeReplacement始终是一个空集。是什么赋予了?

4

2 回答 2

1

知道了。两件事情:

首先,至少对于无序对多关系,KVO 基础设施会在willChange-:通话中记录您的财产价值。On didChange-:,它只传递给定的集合减去前一个值。其次,在viewWillAppear:,甚至在[super viewWillAppear:]通话之前,hidden == NO

就我而言,这意味着属性是返回非空集。KVO 减法的结果是空集。

于 2013-04-11T16:07:31.847 回答
0

当你打电话时addObserver:...,你是否NSKeyValueObservingOptionNew作为一个选项通过?默认情况下,您不会获得此值。

于 2013-04-11T15:01:22.413 回答