想象一下我有一个核心数据对象,产品。每个产品都有一个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(使用前将#替换为@)