2012-08-03 29 views
1

當我將UIColor對象添加到數組中時,我得到了Thread1: Program received signal: 「SIGBRT」這個錯誤。如何在iOS中添加UIColor對象到NSMutableArray中

NSMutableArray *array =[[NSMutableArray alloc] init]; 
     UIColor *color1,*color2, *color3,*color4; 
     color1 = [UIColor blueColor]; 
     color2 = [UIColor colorWithHue:0.5 
          saturation:0.1 
          brightness:0.2 
           alpha:1.0]; 
     color3 = color2; 
     [array addObject:color1];//No Problem 
     [array addObject:color2];//No Problem 
     [array addObject:color3];//No Problem 
     [array addObject:color4];//Problem is here..... 

當我將前三個對象添加到數組中時,沒有任何問題。但是當我添加最後一個對象時,我得到錯誤。這段代碼有什麼問題?我應該像第一個三個對象那樣將任何東西分配給第四個對象(color4)嗎?有必要嗎?爲什麼?...

請用實例給我推薦。提前致謝。

回答

3

color4未初始化,您嘗試在您的數組中插入nil。像其他顏色一樣初始化color4。

2

當您將其添加到數組時,Color4爲零。 NSMutableArrays沒有終止。這意味着NSMutableArray中的最後一個元素是零。你不能手動添加nil對象到數組中,這意味着nil對象之後的數據將被忽略!

下面的代碼產生一個異常:

NSMutableArray *array = [[NSMutableArray alloc] init]; 

UIColor *color; 

[array addObject:color]; 

*終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因: '* - [__ NSArrayM insertObject:atIndex:]:對象不能是零'

解決的辦法是在將color4變量添加到數組之前初始化color4變量。

6

在你不初始化指針(color4)之前,它指向一個未定義的位置,在該位置可能沒有對象,只是垃圾。也許它甚至不是一個有效的menory位置。當解除引用時,它會以通俗的方式崩潰。您需要將其初始化爲有效的對象。

此外,該對象不能是nil否則NSMutableArray本身將引發異常。

+0

爲什麼downvote,到底是什麼? – 2012-08-03 05:55:59

+0

+1來糾正似乎已經奏效的東西。 – CodaFi 2012-08-03 05:56:59

+0

@CodaFi謝謝。 – 2012-08-03 05:58:31

0

嘗試:

UIColor* color1 = [UIColor blueColor]; 
    UIColor* color2 = [UIColor greenColor]; 
    UIColor* color3 = [UIColor whiteColor]; 
    UIColor* color4 = [[UIColor alloc] init]; 

    NSMutableArray* arrayColor = [[NSMutableArray alloc] initWithObjects:color1, color2, nil ]; 

    [arrayColor addObject:color3]; 
    [arrayColor addObject:color4]; 
+0

絕對不是第二個...你不能插入'nil'成陣列。 – borrrden 2012-08-03 06:07:59

0

您需要創建第一的UIColor對象和數組像下面這樣添加

NSArray *mycolorsArray = [[NSArray alloc] initWithObjects:color1, color2, nil]; 
相關問題