我正在尝试观察收藏说明。这是代码:
-(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];
目前,它没有开火!
答案 0 :(得分:1)
NSKeyValueChangeRemoval
不是可以在options
的{{1}}参数中传递的选项。这是传递给-addObserver:forKeyPath:options:context:
方法的更改字典的NSKeyValueChangeKindKey
条目中的值之一。
您不是以符合KVO的方式修改-observeValueForKeyPath:ofObject:change:context:
属性。您正在通过notes
属性获取指向(可能)可变集合的指针,但随后您将直接对其进行变更。您应该实现然后使用适当的collection mutation accessors。
您还可以使用notes
或-mutableArrayValueForKey:
方法获取代理并通过该代理改变属性,这将生成正确的KVO更改通知。