1

Core Data オブジェクト Product があるとします。各製品には、、、quantityおよびprice属性がありtotalます。Total は、テーブルから項目を取得するときの効率のためにあります。(フェッチされたプロパティを使用して計算値を取得する効率的な方法があるかもしれないことは理解していますが、これは単なる例であり、その答えは私が探しているものではありません。)

+------+----------+-------+-------+
| Name | Quantity | Price | Total |
+------+----------+-------+-------+
| Foo  |        1 |    20 |    20 |
| Bar  |        0 |    30 |     0 |
| Baz  |        3 |     5 |    15 |
+------+----------+-------+-------+

price製品の は決して変わらないと仮定します。ただし、quantity変わります。が変更されるたびに、quantity通知を受け取り、 を再計算できるようにしたいと考えていtotalます。カスタム NSManagedObject クラスがあるため、可能であれば KVO の使用を避けたいと考えproductています。また、価格を更新するためにそのメソッドの 1 つをオーバーライドし、独自の属性での通知の登録/登録解除について心配する必要がないようにしたいと考えています。

このメソッドは、オブジェクトの属性が変更されるたびにではなく、価格が変更されたときにのみ呼び出す必要があります。

totalまた、コンテキストが保存される前に新しい属性にアクセスできるように、値が変更されたときに(たとえば、コンテキストが保存される直前ではなく)このメソッドがトリガーされるようにしたいと考えています。

どのメソッドをオーバーライドする必要があり、Product クラスのカテゴリで実行できますか?


注:この質問は似ていますが、主に複数のスレッドを実行することに関係しているため、より複雑な回答が必要になる場合があります。シングルスレッドでシンプルなものを探しています。

4

1 に答える 1

1

quantityエンティティの属性のセッター メソッドをオーバーライドする必要があります。

- (void)setQuantity:(NSNumber *)quantity
{
    [self willChangeValueForKey:@"quantity"];
    [self setPrimitiveValue:quantity forKey:@"quantity"];
    [self didChangeValueForKey:@"quantity"];

    NSNumber *price = ... // compute new price
    self.price = price;
}

Xcode で生成されたファイルを変更したくない場合は、そのコードを Product クラスのカテゴリに追加できます。

于 2013-06-28T19:20:56.667 に答える