iphone - 使用 observeValueForKeyPath 观察 NSMutableSet 的插入和删除

标签 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 吗?

最佳答案

NSMutableSet 确实符合 KVO/KVC。但是,为了按照您设置的方式接收通知,您需要为一个集合实现 KVC 访问器方法。可以查资料here .本质上,您必须实现以下方法:

-countOfConnections
-enumeratorOfConnections
-memberOfConnections:
-addConnectionsObject:
-removeConnectionsObject:
-intersectConnections:

您必须使用这些方法来访问和改变您的集合,以便接收 KVO 通知。

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

关于iphone - 使用 observeValueForKeyPath 观察 NSMutableSet 的插入和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8375282/

相关文章:

iphone - App Store 下载旧版本应用程序

ios - xcode ios构建链接器命令失败,退出代码

ios - iPad 上 UITextField 的自定义删除按钮

javascript - HTMl5 tel 和 sms 是否返回任何值?

objective-c - 隐藏 JSQMessageViewController 气泡中的链接

iphone - 通过 CMake 构建时如何指定通用 iOS 应用程序?

iphone - UITextview dataDetectorTypeAddress - 在不同应用程序中打开的 map

ios - UISaveVideoAtPathToSavedPhotosAlbum 输出

iphone - 如何检测 UIScrollView 的下一页页码 'scrollView.pagingEnabled' = YES?在 'scrollViewDidEndDragging' 中?

ios - 当方法重新运行时,在方法中循环 dispatch_after 会导致许多同时调度