2013-02-28 135 views
0

我想了解核心數據如何工作。爲此,我一直試圖推行一個名爲「顏色」這些屬性的簡單實體:根據其他屬性設置核心數據屬性

  • 值 - >一個NSColor來處理本身的顏色,綁定到NSColorWell
  • 紅 - >浮點數值處理的顏色的紅色成分,結合於NSSlider
  • 綠色 - >相同紅色,但對於綠色分量,結合於NSSlider
  • 藍 - >藍色分量,結合於NSSlider

對於這我使用一個名爲顏色我已經覆蓋 - (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的顏色選擇器)的組件適應自己。 我試圖實現這一點,但它從來沒有工作。我已經嘗試了太多的東西來粘貼它們(這是無關緊要的,因爲它不起作用)。 我該怎麼做?瞭解這一點可以幫助我理解Core Data的工作原理。

+0

您是否嘗試過實現自定義setter'setValue'? - 實際上,我不會使用「value」作爲屬性名稱,以避免與所有這些鍵值方法(如setValue:forKeyPath等)發生衝突。 – 2013-02-28 19:20:10

+0

您正確實施'setValue:'解決了問題。我現在將發佈工作代碼。謝謝:)(這個名字不是問題,我認爲,因爲它在很多蘋果的類上使用,比如NSControl) – Pyroh 2013-02-28 21:40:04

回答

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滑塊工作。