当特定属性更改时如何更新 NSManagedObject?

2024-03-06

想象一下我有一个核心数据对象,产品。每个产品都有一个quantity, price, and total属性。 Total 是为了提高从表中检索项目时的效率。 (我知道可能有一种有效的方法可以使用获取的属性来获取计算值,但这只是一个示例,这个答案不是我想要的。)

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

假设price产品的本质永远不会改变。但是,那quantity确实改变了。每当quantity更改,我希望收到通知,以便我可以重新计算total。如果可能的话,我想避免使用 KVO,因为我有一个自定义 NSManagedObject 类,product,并且我想重写其方法之一以更新价格,而不必担心在其自身属性上注册/取消注册通知。

仅应在价格更改时调用此方法,而不是每次对象的任何属性更改时调用。

我还希望在值更改时立即触发此方法(例如,不在保存上下文之前触发),以便我可以访问新的值total保存上下文之前的属性。

我应该重写哪个方法?它可以在我的 Product 类的类别中完成吗?


Note: 这个问题 https://stackoverflow.com/questions/3901207/detecting-changes-to-a-specific-attribute-of-nsmanagedobject类似,但主要关注运行多个线程,这可能需要更复杂的答案。我正在寻找简单的、单线程的东西。


您应该重写 setter 方法quantity您的实体的属性:

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

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

如果您不想更改,可以将该代码添加到 Product 类的类别中 Xcode 生成的文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当特定属性更改时如何更新 NSManagedObject? 的相关文章

随机推荐