【发布时间】:2017-10-05 19:39:15
【问题描述】:
我有一个连接到 Storyboard GUI 的核心数据模型。(Xcode 9 和 SWIFT 4)我现在想添加一个从其他两个派生的属性。我有一个名为 Workout 的实体,它的两个属性“rpe”和“seconds”组合在一起创建了一个新属性“rpeTSS”。我已将“repTSS”声明为我的核心数据模型中的一个属性。我已将其设置为瞬态。
我曾尝试使用编辑器菜单下的“制作 NSManagedObject 子类...”选项,但这似乎会生成带有错误的文件。我尝试对生成的 Workout 类进行子类化,但不知道如何将其绑定到 GUI。
然后我对锻炼进行了扩展:
extension Workout{
public override func value(forKey key: String) -> Any? {
if key == "rpeTSS"{
return (100/49)*rpe*rpe*Double(seconds)/3600
}else{return super.value(forKey: key)}
}
}
老实说,这“感觉”不太对。无论如何,它(有点)有效。我现在确实得到了 rpeTSS 的正确值,它显示在我的 gui 中。但是,如果我对 rpe 和/或秒数进行更改,则 GUI 不会更新。
我猜上面的方法有点小技巧,因此绕过了各种让 GUI 更新的消息传递。
在核心数据中添加派生属性的正确方法是什么?我试图以某种方式实现这一点,这意味着如果我向我的数据模型添加任何内容,我不必为派生属性重写代码。
【问题讨论】:
-
你能创建一个实体类的对象并在那里设置属性吗?然后,每当您更改 rpe 或 seconds 时,也会更新 rpeTSS 属性。
-
不确定您的意思。 Entity 类是在 XCode 中自动生成的。我尝试对它进行子类化,但遇到了两个问题 - 1. 如何使 ManagedObject 成为我的子类的实例并绑定到 GUI 中的子类;和 2. 我不断收到错误消息,指出我的计算属性不符合键值。