RACObserve在NSMutableArray中更新值?

And*_*s C 1 objective-c ios reactive-cocoa

我对NSMutableArray中的值更改有问题.

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

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

这里的想法是uploadFields在有变化的时候打电话NSMutableArray postedImagesIds.但不仅在添加新元素时,而且在更新值时也是如此:

[self.postedImagesIds replaceObjectAtIndex:i withObject:imagePosted.imagePostedId];
Run Code Online (Sandbox Code Playgroud)

那么事情就是当价值更新时,RACObserve永远不会知道!有没有办法认识到这种变化?

提前致谢!

eri*_*ice 10

它可以做,有点.重要的是你必须通过KVC on执行NSMutableArray变异self,而不是对NSMutableArray对象的独立引用.换句话说,如果你这样做,它将无法工作:

[self.postedImagesIds addObject:imagePosted.imagePostedId];
or
[self.postedImagesIds replaceObjectAtIndex:i withObject:imagePosted.imagePostedId];
Run Code Online (Sandbox Code Playgroud)

相反,你必须像这样添加或替换对象:

NSMutableArray *fromKVC = [self mutableArrayValueForKey:@"postedImagesIds"];
[fromKVC addObject:imagePosted.imagePostedId];
or
[fromKVC replaceObjectAtIndex:i withObject:imagePosted.imagePostedId];
Run Code Online (Sandbox Code Playgroud)

这是因为建立的KVO RACObserve()相对于您传入的对象作为其第一个参数(self在本例中),因此只有通过观察对象的KVC兼容突变才会触发观察通知.