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的突变才会触发观察通知。