0

我试图了解 Core Data 是如何工作的。为此,我尝试使用以下属性实现一个名为“Color”的简单实体:

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

为此,我使用了一个名为 Color 的类,并覆盖了 - (id)value 以根据组件获取颜色:

 @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 的颜色选择器)时,组件会自行调整。我试图实现这一点,但它从来没有奏效。我已经尝试了太多东西来将它们粘贴在这里(这无关紧要,因为它不起作用)。我怎样才能做到这一点 ?理解这一点可以帮助我理解 Core Data 是如何工作的。

4

1 回答 1

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 滑块了。

于 2013-02-28T21:43:30.657 回答