6

したがって、私は Core Data と KVO にはかなり慣れていませんが、独自の対多関係を正常に観察している NSManagedObject サブクラスがあります。問題は、観察された変更で、追加または削除されたオブジェクトのセットのみを反復処理したいことです。これらのアイテムに直接アクセスする方法はありますか? または、次のような比較的非効率的なことを行う必要があります。

NSSet* newSet = (NSSet*)[change objectForKey:NSKeyValueChangeNewKey];
NSSet* oldSet = (NSSet*)[change objectForKey:NSKeyValueChangeOldKey];

NSMutableSet* changedValues = [[NSMutableSet alloc] initWithSet:newSet];
[changedValues minusSet:oldSet];

これらのメッセージでは...

[self willChangeValueForKey:forSetMutation:usingObjects:];
[self  didChangeValueForKey:forSetMutation:usingObjects:];

追加/削除されたオブジェクトを渡しています! おそらく、これらのオブジェクトに何が起こるかについての知識は役に立ちますか?

4

2 に答える 2

5

KV 観測によって得られる「古い」値と「新しい」値の内容を実際に調べましたか。によってトリガーされた可変セットの変更を観察すると、didChangeValueForKey:forSetMutation:usingObjects:NSKeyValueChangeNewKey の変更辞書の値は追加されたオブジェクトのみを保持し、NSKeyValueChangeOldKey の値は削除されたオブジェクトのみを保持するため、何が変更されたかを手動で把握する必要はありません。ただし、によってトリガーされる観察では、didChangeValue:forKey: 内容が同じであっても、NSKeyValueChangeOldKey の古いコレクション全体と NSKeyValueChangeNewKey の新しいコレクション全体が得られます。

于 2011-11-07T19:53:24.813 に答える
2

オブジェクトを監視するために登録するときは、NSKeyValueObservingOptionNewオプション (必要に応じてNSKeyValueObservingOptionOldも) を含めます。

于 2011-07-05T18:14:34.447 に答える