objective-c – 键值观察NSMutableSet

前端之家收集整理的这篇文章主要介绍了objective-c – 键值观察NSMutableSet前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在普通类中,我有一个NSMutableSet属性.每当在集合中添加删除对象时,我都想执行一些自定义代码.我知道我可以在类中编写一些addObjectToSet:类似的方法,但我想知道是否有一个更优雅的解决方案,在集合上直接使用KVO.

事实证明,当您尝试向其添加观察者时,NSSet将引发异常.毫不奇怪,因为可能没有可以观察到的命名keyPath. The documentation非常清楚异常,但我不明白建议的解决方法

Instead of observing a set,observe the unordered to-many relationship for which the set is the collection of related objects.

有人可以重申这意味着什么吗?那么解决方法会是什么样子?

解决方法

这是一种非常密集的说法“不要向集合本身添加观察者,将观察者添加到包含集合的类”:
[myObjWithASetAsIvar addObserver:self
                      forKeyPath:@"nameOfIvarHoldingTheSet"
                         options:NSKeyValueObservingOptionNew
                         context:nil];

一个棘手的问题是,您需要将所有访问包装到集合中,以便发送正确的通知.在包含集合的类中:

[self willChangeValueForKey:@"nameOfIvarHoldingTheSet"];
// Do something with the set
[self didChangeValueForKey:@"nameOfIvarHoldingTheSet"];

还有两种专门针对集合的通知方法willChangeValueForKey:withSetMutation:usingObjects:didChangeValueForKey:withSetMutation:usingObjects:;您可能会发现它们比通用的“价值变化”方法更适合您.

所有这一切,我相信你在第一段提到的解决方案,以及Girish问题中的outlined by Peter Hosey,可能是最好的方法.

猜你在找的C&C++相关文章