objective-c – 键值观察NSMutableSet

objective-c – 键值观察NSMutableSet,第1张

概述在普通类中,我有一个NSMutableSet属性.每当在集合中添加或删除对象时,我都想执行一些自定义代码.我知道我可以在类中编写一些addObjectToSet:类似的方法,但我想知道是否有一个更优雅的解决方案,在集合上直接使用KVO. 事实证明,当您尝试向其添加观察者时,NSSet将引发异常.毫不奇怪,因为可能没有可以观察到的命名keyPath. The documentation非常清楚异常, 在普通类中,我有一个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,可能是最好的方法.

总结

以上是内存溢出为你收集整理的objective-c – 键值观察NSMutableSet全部内容,希望文章能够帮你解决objective-c – 键值观察NSMutableSet所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1239636.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存