mar*_*kjs 5 cocoa core-data key-value-observing
我希望能够更改具有startDate和endDate的(日历)事件.还有一段时间.
最后一个动作将触发第一个动作,该动作将触发第三个动作,这将触发第一个动作无限制(或者当堆栈填满时).
像下面这样的行来更改值,导致这个循环:
[self setValue:[NSNumber numberWithLong:(interval%60)] forKeyPath:@"durationMinutes"];
[self setValue:ed forKeyPath:@"endDate"];
Run Code Online (Sandbox Code Playgroud)
简单地停止观察并在更改后重新启动是不具吸引力的,因为GUI中的值不会更新.那么问题是:我如何安全(和优雅地)更新两个相互依赖的属性之一?
您可以在必要时使用绕过KVO通知setPrimitiveValue:forKey:.设置值但不触发任何通知.它还绕过了您可能拥有的任何自定义设置器.这应该会打破通话周期.
使用此方法时,通常需要调用"将更改"和"更改"方法以确保维护Core Data状态.就是这样的:
[self willChangeValueForKey:@"endDate"];
[self setPrimitiveValue:ed forKey:@"endDate"];
[self didChangeValueForKey:@"endDate"];
Run Code Online (Sandbox Code Playgroud)
这避免了需要一个标志 - 你只是说,嘿,设定值并且没有乱七八糟,好吗?
| 归档时间: |
|
| 查看次数: |
616 次 |
| 最近记录: |