如何订阅使用 ReactiveCocoa 从 NSMutableDictionary 添加和删除的对象?另外,我想在通知发生变化时广播通知。我的猜测是广播可以使用 RACMulticastConnection 完成,但我如何将它与字典更改联系起来?我第一次尝试在我的项目中使用 ReactiveCocoa 并坚持我想做的第一件事:(
问问题
1359 次
2 回答
7
RACObserve
是键值观察的包装器,并继承了相同的功能和缺陷。
不幸的是,NSMutableDictionary
不会自动观察到。有两种方法可以解决这个问题:
- 子类化它并添加 KVO 支持。
- 创建一个真实的模型对象,使用属性而不是字典键。然后,只要您使用 setter 而不是直接 ivar 修改,您就会在这些属性上获得 KVO。
我不确定您所说的“当通知发生变化时[广播]通知”是什么意思,或者它为什么有价值。通知对我来说太全球化了,我会提倡使用更有限的观察来代替(比如 KVO)。
但是,假设您确实想要这样做,发布通知以响应新的信号值很简单:
@weakify(self);
[RACObserve(self, dictionary) subscribeNext:^(NSDictionary *dictionaryValue) {
@strongify(self);
[NSNotificationCenter.defaultCenter postNotificationName:SomeNotificationName object:self];
}];
如果您想要 KVO 的更改字典(其中包括有关添加/删除值的信息),您需要替换RACObserve
为+rac_valuesAndChangesForKeyPath:options:observer:。
于 2013-10-07T16:05:17.870 回答
-1
每次设置或删除键值时,重置字典,这样你就可以观察字典了。就像:
[RACObserve(self, testDict) subscribeNext:^(id x) {
NSLog(@"RACObserve testDict:%@",x);
}];
[self.testDict setObject:value forKey:key];
self.testDict=self.testDict;
于 2015-05-27T09:04:59.347 回答