RACObserve在NSMutableArray中的值更新?

我有一个问题反应在NSMutableArray中的值更改。

我有以下(稍微简化)的代码来检测变化:

[[RACObserve(self, postedImagesIds) filter:^BOOL(NSMutableArray * postedImagesIds) { return [postedImagesIds count] > 0; }] subscribeNext:^(NSMutableArray * postedImagesIds) { [self uploadFields:fields]; }]; 

这里的想法是当NSMutableArray postedImagesIds发生变化时调用uploadFields 。 但是,不仅在添加新元素时,而且在更新值如下时:

 [self.postedImagesIds replaceObjectAtIndex:i withObject:imagePosted.imagePostedId]; 

那么值得更新的时候, RACObserve永远不会知道! 有没有办法认识到这个变化?

提前致谢!

这可以做,有点。 最重要的部分是你必须通过KVC在self上执行你的NSMutableArray变异,而不是对NSMutableArray对象的独立引用。 换句话说,如果你这样做,它将不起作用:

 [self.postedImagesIds addObject:imagePosted.imagePostedId]; or [self.postedImagesIds replaceObjectAtIndex:i withObject:imagePosted.imagePostedId]; 

相反,你必须添加或replace这样的对象:

 NSMutableArray *fromKVC = [self mutableArrayValueForKey:@"postedImagesIds"]; [fromKVC addObject:imagePosted.imagePostedId]; or [fromKVC replaceObjectAtIndex:i withObject:imagePosted.imagePostedId]; 

这是因为RACObserve()build立的KVO与你传递的第一个参数(本例中是self )相关,所以只有通过观察对象的符合KVC的突变才会触发观察通知。