質問: KVOの更新通知をどのように出せばいいのか悩んでいます ``` @interface aClass : NSManagedObject @property (nonatomic, retain) NSNumber *attr0; @property (nonatomic, retain) NSNumber *attr1; @property (nonatomic, retain) NSNumber *attr2; @property (nonatomic, retain) NSNumber *attr3; @property (readonly) NSNumber *calculatedAttr; @end @implementation aClass @dynamic attr0, attr1, attr2, attr3; + (NSSet *)keyPathsForValuesAffectingCalclatedAttr { return [NSSet setWithObjects:@"attr0",@"attr1", @"attr2", @"attr3", nil]; } - (NSNumber *)calculatedAttr { return @(self.attr0.integerValue + self.attr1.integerValue + self.attr2.integerValue + self.attr3.integerValue); // 実際はもう少し複雑です } @end ``` このようなクラスのオブジェクトが複数ありその中の任意の6個を選択します。 そして、6個のcalculatedAttrの合計値をUIに表示しています。 つまり内部的には6*4=24個のデータが関係した値です。 現在はNSArrayControllerを使用し、なおかつKVOの自動通知に任せているのですが、通知の頻度が高すぎ、calculatedAttrの計算が過剰に行われるため、これを軽減できないかと考えてます。 しかし、24個の値は1個だけ変更されることもあれば、24個すべて同時に変更されることもあるため、どれか1つのみを監視対象として残し、他ものは変更通知を行わないようにすることも出来ません。 なにかよい知恵はないでしょうか?
回答: 上記の仕様に加えてcoredataということなので、どうしようもないような気はします(faultもありますし)。 これがNSManagedObjectでなければ、attr0~3を配列にまとめるとか、setterを上書きして以前の値と変わっていた時のみcalculatedAttrを計算、という手も使えそうではありますが......。