我有一个核心数据实体,它有三个属性startDate,endDate和duration。所有三个属性都是持久属性。我想知道每当startDate和endDate的值发生变化时我如何计算和更新持续时间属性?
顺便说一下,我不能把持续时间作为临时属性,因为我必须在我的表格视图中使用该属性进行排序?非常感谢任何帮助
谢谢, Javid
答案 0 :(得分:0)
两个选项:
覆盖设置者并导致在调用其他设置者时更新持续时间;
使用KVO通知更改并更新持续时间。
最佳解决方案取决于您的应用设计。
答案 1 :(得分:0)
如果您还没有这样做,则需要让Xcode为您的实体生成托管对象类。如果你看一下.m文件,你的属性都被声明为@dynamic。这意味着您未声明的任何访问器方法都将动态生成。
现在,您可以为startDate和endDate声明自定义setter,同时仍依赖于动态“get”和“primitive”方法。核心数据在“引擎盖下”使用的主要方法,但现在你也需要调用它们:
- (void)setStartDate:(NSDate *)newStartDate
{
// This part replicates what a dynamic setter would do
[self willChangeValueForKey:@"startDate"];
[self setPrimitiveStartDate:newStartDate];
[self didChangeValueForKey:@"startDate"];
// Now, calculate your new duration
calculatedDuration = ...
// Set the duration property
self.duration = calculatedDuration;
}