可可绑定:更改时获取旧值

Posted

技术标签:

【中文标题】可可绑定:更改时获取旧值【英文标题】:Cocoa bindings: get old value upon change 【发布时间】:2010-01-26 04:03:20 【问题描述】:

我正在编写一个核心数据 Cocoa 应用程序,其中有账户和交易(货币)。帐户实体描述包含余额属性。交易实体描述与账户有关系。

当交易的帐户设置或更改时,我需要应用程序更新帐户余额。例如,如果交易账户从支票账户更改为信用账户,则支票账户和信用账户的余额都应更改以反映这一点。

我遇到的问题是我不确定如何确定交易的旧帐户,以便更新其余额。我正在使用绑定。

谁能指出我正确的方向?

【问题讨论】:

【参考方案1】:

我假设账户实体与交易有反比关系。 (Apple 强烈建议你总是有反向关系。所以如果你没有,请设置它!)

假设您有一个 NSManagedObject 的子类 Account 用于帐户实体,Transaction 用于交易实体。 将事务的反向关系称为transactions

然后,当您更改交易帐户时,CoreData 会自动更新反向关系。因此,您所要做的就是在Account 中为transactions 编写一个自我观察例程,以便Account 对象自己跟踪平衡。我认为让Account 对象自己照顾自己比从Transaction 对象一侧改变平衡更面向对象……当然这取决于你的口味。

要执行观察,请使用KVO。基本上,您通过addObserver:forKeyPath:options:context: 使用一组合适的选项注册KVO。然后,您可以通过实现observeValueForKeyPath:ofObject:change:context: 来获得更改。可以在传递给该方法的字典中找到更改。

【讨论】:

确保在options:-addObserver: forKeyPath: options: context: 设置中指定要传入新值和旧值。

以上是关于可可绑定:更改时获取旧值的主要内容,如果未能解决你的问题,请参考以下文章

如何在文本框中使用 onchange() 事件获取旧值

可可绑定核心数据中的延迟获取是啥?

在可可中使用绑定时未反映在视图中的更改

如何在ruby中获取旧值和新值之间的差异

react使用textarea给value赋值后获取到的是旧

如何从 JSF/ADF 验证器中获取旧值?