objective-c - react 性 NSMutableDictionary?

标签 objective-c nsmutabledictionary multicast reactive-programming reactive-cocoa

如何使用 ReactiveCocoa 订阅从 NSMutableDictionary 添加和删除的对象?另外,我想在它发生变化时广播通知。我的猜测是可以使用 RACMulticastConnection 完成广播,但我如何将其与字典更改联系起来?我第一次尝试在我的项目中使用 ReactiveCocoa 并坚持我想做的第一件事:(

最佳答案

RACObservekey-value observing 的包装器, 并继承了相同的特性和缺陷。

不幸的是,NSMutableDictionary 不是自动可观察的。有两种方法可以解决这个问题:

  1. Subclass it and add KVO support .
  2. 创建一个真实的模型对象,使用属性而不是字典键。然后,只要您使用 setter 而不是直接修改 ivar,您就会在这些属性上获得 KVO。

我不确定您所说的“[广播] 通知发生变化时”到底是什么意思,或者它为什么有值(value)。通知对我来说太全局化了,我提倡使用更有限的观察(比如 KVO)。

但是,假设您确实想要这样做,发布通知以响应新的信号值就足够简单了:

@weakify(self);
[RACObserve(self, dictionary) subscribeNext:^(NSDictionary *dictionaryValue) {
    @strongify(self);
    [NSNotificationCenter.defaultCenter postNotificationName:SomeNotificationName object:self];
}];

如果您想要 KVO 的更改字典(其中包括有关添加/删除值的信息),您需要将 RACObserve 替换为 +rac_valuesAndChangesForKeyPath:options:observer: .

关于objective-c - react 性 NSMutableDictionary?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19211314/

相关文章:

Iphone:滚动时 UITableview 中的复选标记会混淆

objective-c - NSDate 无法正确加载/显示

C# UdpClient——Ttl 属性与 SetSocketOption

python - 在 Python 中查找多播 UDP 消息发件人的 MAC 地址?

objective-c - ShareKit - 如何访问 Twitter 用户名

python - wireshark 看到但应用程序看不到来自 tcp 重放的组播

ios - 如何将 Storyboard的搜索栏分配给 searchController searchBar 属性

iphone - NSDateFormatter dateFromString 返回 nil

ios - 如何在 Swift 中将 NSMutableArray 作为对 NSMutableDictionary 部分的引用传递?

objective-c - NSMutableDictionary 添加子项