オブジェクトのNSArrayでKVOをまだダイジェストできません。私の要求はガレージ内に複数の車があるとします。フロントタイヤのアップグレードやバックタイヤのような車のタイヤ特性の変化を観察したい。KVO - NSArrayに含まれるオブジェクトのプロパティを確認します。
Car.h
@property(nonatomic, strong) NSString *frontTyre;
@property(nonatomic, strong) NSString *backTyre;
Garage.h
[Garage addObserver:self forKeyPath:@"cars" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];]
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if([keyPath isEqualToString:@"cars"])
{
//Here I am able to get the car object which got a type upgrade.
//But how to know which tyre got upgraded?
}
}
CarOwner.mで
@property(nonatomic, strong) NSArray *cars; //Think there are two cars in the garage.
私がやっている車のタイヤのアップグレード中:
[self willChange:NSKeyValueChangeSetting valuesAtIndexes:index forKey:@"remoteUsers"];
[car1.frontTyre = @"upgraded"];
[self didChange:NSKeyValueChangeSetting valuesAtIndexes:index forKey:@"remoteUsers"];
を
thisまたはthisに行かなければなりませんか?または他の提案をお願いします。
参照する2つの回答は基本的に同じで、コレクション内の項目を個別に観察します。コレクション自体ではなく – Wain
@Wainはい、両方のリンクは同じです。しかし、2番目のものは、鎖の真下にある可変配列要素を再帰的に観察することについて記述しています。しかし、コンセプトは同じです。この深刻な観察を避けるための他の方法はありますか? – SaffronState
変更された情報で実際に何をしようとしていますか?どのように変更されますか?あなたのコードで明示的に 'willChange'と' didChange'をどれくらい使っていますか? – Wain