根据其他属性设置Core Data属性

时间:2013-02-28 18:03:23

标签: cocoa core-data

我正在尝试了解Core Data的工作原理。为此,我尝试使用以下属性实现名为“Color”的简单实体:

  • 值 - > NSColor处理颜色本身,绑定到NSColorWell
  • 红色 - >一个浮点值,用于处理颜色的红色成分,绑定到NSSlider
  • 绿色 - >与红色相同,但对于绿色组件,绑定到NSSlider
  • 蓝色 - >蓝色组件,绑定到NSSlider

为此,我使用了一个名为Color的类,并且我已经覆盖 - (id)值来获取颜色,具体取决于组件:

 @implementation Color

@dynamic blue;
@dynamic green;
@dynamic name;
@dynamic red;
@dynamic value;

- (id)value
{
    return [NSColor colorWithCalibratedRed:self.red.floatValue green:self.green.floatValue blue:self.blue.floatValue alpha:1.0];
}


+ (NSSet *)keyPathsForValuesAffectingValue
{
    return [NSSet setWithArray:@[@"red", @"green", @"blue"]];
}

每次更改滑块值时,颜色都会自行调整到组件。

我想要做的是反向操作,当我设置颜色(拖放或NSColorWell的颜色选择器)时,组件会自行调整。 我试图实现这一点,但它永远不会奏效。我已经尝试了太多的东西来粘贴它们(这是无关紧要的,因为它不起作用)。 我怎样才能做到这一点 ?理解这一点可以帮助我理解核心数据的工作原理。

1 个答案:

答案 0 :(得分:0)

所以这是使它工作的代码片段:

@implementation Color

@dynamic blue;
@dynamic green;
@dynamic name;
@dynamic red;
@dynamic value;

- (id)value
{
    return [NSColor colorWithCalibratedRed:self.red.floatValue green:self.green.floatValue blue:self.blue.floatValue alpha:1.0];
}

- (void)setValue:(id)value
{
    [self willChangeValueForKey:@"value"];
    [self setPrimitiveValue:value forKey:@"value"];
    [self didChangeValueForKey:@"value"];
    [self setRed:@([(NSColor *)value redComponent])];
    [self setGreen:@([(NSColor *)value greenComponent])];
    [self setBlue:@([(NSColor *)value blueComponent])];
}

+ (NSSet *)keyPathsForValuesAffectingValue
{
    return [NSSet setWithArray:@[@"red", @"green", @"blue"]];
}

现在我可以处理HSB滑块了。