0

我正在尝试观察收藏笔记。这是代码:

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

目前,它没有开火!

4

1 回答 1

1

NSKeyValueChangeRemoval不是可以在options参数中传递的选项-addObserver:forKeyPath:options:context:。它是可以在NSKeyValueChangeKindKey传递给您的-observeValueForKeyPath:ofObject:change:context:方法的更改字典条目中的值之一。

您没有notes以符合 KVO 的方式修改属性。您正在通过该属性获取指向(可能)可变集合的指针notes,但随后您直接对其进行了变异。您应该实现然后使用适当的集合变异访问器

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

于 2013-09-09T03:40:22.187 回答