使用Swift中的核心数据进行KVO通知

时间:2016-05-12 06:37:43

标签: core-data key-value-observing

当我使用swift生成NSManagedObject子类时,属性类型都是@NSManaged,这意味着我无法观察它们。在Cocoa应用程序中使用绑定时这是一个问题,因为更新属性经常需要“更新”其他属性。

例如,如果我将此方法添加到我的NSManagedObject子类:

dynamic var ratePerPoint: Double {
    guard pointsPerMonth > 0 else { return 0 }

    return monthlyRate / Double(pointsPerMonth)
}

然后重要的是,每当我更新pointsPerMonth变量(它是核心数据对象的一部分)时,我发送didChangeValueForKey("ratePerPoint")消息。

如果不这样做,则UI绑定不会正确更新。

1 个答案:

答案 0 :(得分:0)

如果ratePerPoint是计算属性,则必须在NSManagedObject子类中实现keyPathsForValuesAffectingRatePerPoint

+ (NSSet *)keyPathsForValuesAffectingRatePerPoint {
    return [NSSet setWithObjects:@"monthlyRate", @"pointsPerMonth", nil];
}

文档:Registering Dependent Keys