0

Core Data の仕組みを理解しようとしています。このために、これらの属性を持つ「Color」という名前の単純なエンティティを実装しようとしました:

  • 値 -> NSColorWell にバインドされた色自体を処理する NSColor
  • red -> NSSlider にバインドされた、色の赤のコンポーネントを処理する float 値
  • green -> red と同じですが、緑のコンポーネント用で、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 に答える