2015-11-08 66 views
1

我有4個對象我的Color類的其餘初始化這樣的:獨立實例具有相同的值彼此

Color *orange = [[[Color alloc] init] initWithRed:255.0 andGreen:128.0 andBlue:0.0]; 
Color *purple = [[[Color alloc] init] initWithRed:255.0 andGreen:0.0 andBlue:127.0]; 
Color *cyan = [[[Color alloc] init] initWithRed:204.0 andGreen:0.0 andBlue:102.0]; 
Color *violet = [[[Color alloc] init] initWithRed:127.0 andGreen:0.0 andBlue:255.0]; 

這些顏色被存儲在一個陣列:

colors = [NSArray arrayWithObjects:orange, purple, cyan, violet, nil]; 

後來我給一個按鈕的背景顏色是這樣的:

button1.backgroundColor = [UIColor colorWithRed: ([([colors objectAtIndex: 0]) getRed]/255.0) 
          green:([([colors objectAtIndex: 0]) getGreen]/255.0) 
          blue:([([colors objectAtIndex: 0]) getBlue]/255.9) alpha:1]; 

我現在的問題是,即使你gh索引0處的顏色是橙色,按鈕的顏色是紫色。如果我從數組中刪除紫羅蘭沒有改變,但當我刪除顏色紫羅蘭時,按鈕變爲青色。

是什麼導致了這種奇怪的行爲?或者我做錯了什麼?

更新

這是我的顏色類:

double Red; 
double Green; 
double Blue; 


- (id)initWithRed:(double) red andGreen:(double) green andBlue:(double) blue { 
    self = [super init]; 
    if (self) 
    { 
     [self setRed:red]; 
     [self setGreen:green]; 
     [self setBlue:blue]; 

    } 
    return self; 
} 



- (void) setRed:(double) red { 
    Red = red; 
} 

- (void) setGreen:(double) green { 
    Green = green; 
} 

- (void) setBlue:(double) blue { 
    Blue = blue; 
} 

- (double) getRed { 
    return Red; 
} 

- (double) getGreen { 
    return Green; 
} 

- (double) getBlue { 
    return Blue; 
} 
+2

請顯示您的Color類的代碼。 – luk2302

+1

爲什麼你有一個自定義顏色班? – Avi

+0

@Avi因爲我想保存自定義顏色。 – Dalibor

回答

1

這三個變量,你打算成爲實例變量已在最外層被宣告等等都是全球變量即它們由每個實例共享。因此,無論您使用哪種實例,您獲得的顏色都是您創建的最後一個顏色。

要聲明實例變量將它們放在括號在類的開始:

@implementation Color : NSObject 
{ 
    double red; 
    double green; 
    double blue; 
} 

// methods... 

@end 

也打過電話了每個物體的兩個init方法,只調用一個,例如:

Color *cyan = [[Color alloc] initWithRed:204.0 andGreen:0.0 andBlue:102.0]; 

HTH

+0

謝謝你解決了我的問題! – Dalibor