【发布时间】:2011-04-24 06:02:54
【问题描述】:
在我完全使用 Core Data 和绑定编写的项目中,我有两个包含浮点值的文本字段。我想制作第三个文本字段,即第一个字段除以第二个字段。使用 Core Data 解决此问题的最佳方法是什么?我应该为第三个字段创建一个自定义访问器吗?
【问题讨论】:
标签: cocoa core-data interface-builder cocoa-bindings accessor
在我完全使用 Core Data 和绑定编写的项目中,我有两个包含浮点值的文本字段。我想制作第三个文本字段,即第一个字段除以第二个字段。使用 Core Data 解决此问题的最佳方法是什么?我应该为第三个字段创建一个自定义访问器吗?
【问题讨论】:
标签: cocoa core-data interface-builder cocoa-bindings accessor
在您的 NSManagedObject 子类中创建一个方法 -thirdValue 来进行计算:
- (CGFloat)thirdValue
{
return value1 / value2; // should probably do a value2 != 0 check
}
然后为类 +keyPathsForValuesAffectingValueForKey:
+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key
{
NSSet *superSet = [super keyPathsForValuesAffectingValueForKey:key];
if ([key isEqualToString:@"thirdValue"])
return [[NSMutableSet setWithObjects:@"value1", @"value2", nil] unionSet:superSet];
return superSet;
}
这会将thirdValue 设置为依赖于value1 和value2。每当 value1 或 value2 发生变化时,也会有关于 thirdValue 的 KVO 通知。因此,如果您有一个绑定到它的字段,该字段将显示新的计算值。当您需要显示值依赖于其他键的键时,这是一个方便的技巧。
【讨论】:
super 并将返回的集合与正在创建的集合合并,或者如果键不是thirdValue,则返回super 返回的集合。跨度>