没有观察到KVC NSKeyValueChangeRemoval

时间:2013-09-09 03:20:19

标签: ios objective-c

我正在尝试观察收藏说明。这是代码:

-(void) registerNotesHeaderViewChangeNotification
{
    [self.selectedVegetableGarden addObserver:self forKeyPath:@"notes" options:NSKeyValueObservingOptionNew | NSKeyValueChangeRemoval context:nil];
}

-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    MyVegetableGarden *vegGarden = (MyVegetableGarden *) object;

    if([vegGarden.notes count] > 0)
    {
        self.tableView.tableHeaderView = [self createSharingView];
    }

    else
    {
        self.tableView.tableHeaderView = nil; 
    }

}

现在,我希望当我从notes集合中删除一个对象时,它应该触发observeValueForKeyPath方法。

[self.selectedVegetableGarden.notes removeObject:note];

目前,它没有开火!

1 个答案:

答案 0 :(得分:1)

NSKeyValueChangeRemoval不是可以在options的{​​{1}}参数中传递的选项。这是传递给-addObserver:forKeyPath:options:context:方法的更改字典的NSKeyValueChangeKindKey条目中的值之一。

您不是以符合KVO的方式修改-observeValueForKeyPath:ofObject:change:context:属性。您正在通过notes属性获取指向(可能)可变集合的指针,但随后您将直接对其进行变更。您应该实现然后使用适当的collection mutation accessors

您还可以使用notes-mutableArrayValueForKey:方法获取代理并通过该代理改变属性,这将生成正确的KVO更改通知。