使用observeValueForKeyPath观察来自NSMutableSet的插入和删除

时间:2011-12-04 12:28:13

标签: iphone objective-c ipad

我希望收到关于NSMutableSet中新插入的通知,因此这就是我正在做的事情,但由于某种原因它没有调用observeValueForKeyPath方法

仅供测试:

-(void)observ{
    [self addObserver:self forKeyPath:@"connections" options:NSKeyValueChangeInsertion context:NULL];

    [connections addObject:@"connectionName"];

}

从未调用过:

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

    if( [keyPath isEqualToString:@"connections"] ) {

        NSLog(@"added new object");
    }
}

是NSMutablSet KVC吗?

1 个答案:

答案 0 :(得分:3)

NSMutableSet确实符合KVO / KVC标准。但是,为了按照您设置的方式接收通知,您需要为集合实现KVC访问器方法。可以找到信息here。实质上,您必须实现名为:

的方法
-countOfConnections
-enumeratorOfConnections
-memberOfConnections:
-addConnectionsObject:
-removeConnectionsObject:
-intersectConnections:

您必须使用这些方法来访问和改变您的设置才能接收KVO通知。

最后,在-observeValueForKeyPath方法中,您可以使用kind字典中的键change的值来确定发生了哪种类型的突变(添加,删除等) 。可以找到值here并列在“NSKeyValueChange”下。希望这会有所帮助。