アレイの内容の変化を監視することは、アレイの数の変化を監視しているとも言えます。(KVOはアレイのカウントを直接監視し、エラーを報告します)
最初の一歩
NSObjectクラスを作成し、mutArr属性を作成する必要があります。(controllrtで直接mutArrモニタリングを作成しても効果はありません)
@interface ObserverModel : NSObject
@property (nonatomic, strong) NSMutableArray *mutArr;
@end
@implementation SystemDetailObserverModel
-(NSMutableArray *)mutArr{
if(_mutArr == nil){
_mutArr = [NSMutableArray array];
}
return _mutArr;
}
@end
第二段階
コントローラにObserverModelオブジェクトを作成し、キーの変更を監視します
@property (nonatomic, strong) ObserverModel *observerModel;
[_observerModel addObserver:self forKeyPath:@"mutArr" options:NSKeyValueObservingOptionNew context:nil];
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
NSLog(@"触发了");
if([keyPath isEqualToString:@"mutArr"]){
}
}
3番目のステップ
mutArrを変更する
[[self.observerModel mutableArrayValueForKeyPath:@"mutArr"] addObject:[NSNumber numberWithInteger:i]];
[[_observerModel mutableArrayValueForKeyPath:@"mutArr"] removeObject:[NSNumber numberWithInteger:indexPath.section]];
[[_observerModel mutableArrayValueForKeyPath:@"mutArr"] removeAllObjects];
最後のステップ
Deallocでremoveobserverメソッドを呼び出し、deallocを正しく呼び出すことができるかどうかを確認します。
-(void)dealloc{
NSLog(@"---------");
[_observerModel removeObserver:self forKeyPath:@"mutArr"];
}