另一个属性更改时的Core Data Change属性值

时间:2010-06-12 22:23:26

标签: objective-c iphone core-data

我有一个核心数据实体,它有三个属性startDate,endDate和duration。所有三个属性都是持久属性。我想知道每当startDate和endDate的值发生变化时我如何计算和更新持续时间属性?

顺便说一下,我不能把持续时间作为临时属性,因为我必须在我的表格视图中使用该属性进行排序?

非常感谢任何帮助

谢谢, Javid

2 个答案:

答案 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;

}