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];
}
当我用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];
}