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 通知的主要内容,如果未能解决你的问题,请参考以下文章

Core Data 中带有自定义对象的可转换集合

Swift Core Data:Core Data 中的枚举 [重复]

Swift - 如何检查现有的 Core Data Store iOS

Swift 中是不是提供键值观察 (KVO)?

Core Data 和 Swift 中的计算属性与持久存储

带有 Segues、Core Data 和 Swift 的 UITableViewController 的问题