Swift 中带有 Core Data 的 KVO 通知
Posted
技术标签:
【中文标题】Swift 中带有 Core Data 的 KVO 通知【英文标题】:KVO notification with Core Data in Swift 【发布时间】:2016-05-12 06:37:43 【问题描述】:当我用 swift 生成一个 NSManagedObject 子类时,属性类型都是@NSManaged,这意味着我无法观察它们。这是在 Cocoa 应用程序中使用绑定时的问题,因为更新属性经常需要“更新”其他属性。
例如,如果我将此方法添加到我的 NSManagedObject 子类中:
dynamic var ratePerPoint: Double
guard pointsPerMonth > 0 else return 0
return monthlyRate / Double(pointsPerMonth)
那么重要的是,每当我更新 pointsPerMonth 变量(它是核心数据对象的一部分)时,我都会发送 didChangeValueForKey("ratePerPoint")
消息。
如果我不这样做,那么 UI 绑定不会正确更新。
【问题讨论】:
核心数据(除了错误)符合 KVO 和 KVC,说明你在做什么,什么不工作 【参考方案1】:如果ratePerPoint
是一个计算属性,你必须在你的NSManagedObject 子类中实现keyPathsForValuesAffectingRatePerPoint
。
+ (NSSet *)keyPathsForValuesAffectingRatePerPoint
return [NSSet setWithObjects:@"monthlyRate", @"pointsPerMonth", nil];
文档:Registering Dependent Keys
【讨论】:
以上是关于Swift 中带有 Core Data 的 KVO 通知的主要内容,如果未能解决你的问题,请参考以下文章
Swift Core Data:Core Data 中的枚举 [重复]