Swift 中带有核心数据的 KVO 通知

KVO notification with Core Data in Swift

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

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

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

    return monthlyRate / Double(pointsPerMonth)
}

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

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

如果 ratePerPoint 是一个计算 属性 你必须在你的 NSManagedObject 子类中实现 keyPathsForValuesAffectingRatePerPoint

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

文档:Registering Dependent Keys