KVO监听/观察数组的内容的变化


kvo方法很简单,但是有几个需要注意的地方。(自己就掉坑里了)


例如:我需要监听 _selectedArray 数组内容的变化


伪代码:


注意点1,如果数组放到ViewController里面是无法监听的,我们需要把数组放到一个继承NSObject的类里面

1,首先新建一个类

@interface  ObserveModel : NSObject

@property (nonatomic) NSMutableArray *array;

@end

@implementation ObserveModel

@end


2,把_selectedArray 赋给ObserveModel的属性

    _observeModel = [ObserveModel new];

    _observeModel.array = _selectedArray;


3,添加观察者:

 [_observeModel addObserver:self forKeyPath:@"array" options:NSKeyValueObservingOptionNew context:nil];


4,实现方法 :如果_observeModel.array 发生了改变,则会调用该方法。

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{


}


注意点2,如果我们修改_observeModel.array  

不能使用[_observeModel.array addObject:cartModel]

需要使用[[_observeModel mutableArrayValueForKey:@"array"]addObject:cartModel] 

 具体原因可以查查KVO的实现机制。

5,最后记得移除观察者

    [_observeModel removeObserver:self forKeyPath:@"array"];  


你可能感兴趣的:(KVO监听/观察数组的内容的变化)