2

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

4

2 回答 2

7

RACObserve键值观察的包装器,并继承了相同的功能和缺陷。

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

  1. 子类化它并添加 KVO 支持
  2. 创建一个真实的模型对象,使用属性而不是字典键。然后,只要您使用 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 回答