【发布时间】:2013-01-09 21:09:48
【问题描述】:
我希望能够更改具有 startDate 和 endDate 的(日历)事件。还有一个持续时间。
- 当用户更改 endDate 时,持续时间也会更新。
- 当用户更改 startDate 时,endDate 会根据持续时间而更改。
- 当用户改变持续时间时,endDate 也会改变。
这最后一个动作将触发第一个动作,这将触发第三个动作,第三个动作将触发第一个动作,无限期(或当堆栈填满时)。
像下面这样的行,为了改变值,导致这个循环:
[self setValue:[NSNumber numberWithLong:(interval%60)] forKeyPath:@"durationMinutes"];
[self setValue:ed forKeyPath:@"endDate"];
简单地停止观察并在更改后重新启动是没有吸引力的,因为 GUI 中的值不会得到更新。 那么问题来了:我怎样才能安全(优雅地)更新两个相互依赖的属性之一?
【问题讨论】:
-
我现在有一个名为 timeIntervalChanged 的实例变量(布尔值)。我在要更改
duration或endDate时将其设置为 TRUE,并在完成后将其设置回 FALSE。当布尔值为 TRUE 时,更改duration和endDate的代码会立即返回。它可以防止无限递归,但感觉就像一个丑陋的解决方案。 -
这是在自定义设置方法中吗?
setStartDate:之类的东西? -
没有自定义设置器; “有问题的”代码位于通过属性值更改调用的方法中。然后这些方法计算其他属性的变化。
标签: cocoa core-data key-value-observing