2013-01-07 69 views
1

我試圖做數組元素的行動,但我真的不明白,爲什麼我的代碼不工作:目標C,數組操作

這裏是我的.h:

@interface ViewController : UIViewController 
{ 
    NSArray *tableauScore; 
    UILabel * modificationScore; 
} 

@property (weak, nonatomic) IBOutlet UILabel *nom1; 
@property (weak, nonatomic) IBOutlet UILabel *nom2; 
@property (weak, nonatomic) IBOutlet UILabel *nom3; 
@property (weak, nonatomic) IBOutlet UILabel *nom4; 
@property (weak, nonatomic) IBOutlet UILabel *bsc1; 
@property (weak, nonatomic) IBOutlet UILabel *bsc2; 
@property (weak, nonatomic) IBOutlet UILabel *bsc3; 
@property (weak, nonatomic) IBOutlet UILabel *bsc4; 

@end 

我.m:

tableauScore = [NSArray arrayWithObjects:nom4, nom3, nom2, nom1, bsc1, bsc2, bsc3, bsc4, nil]; 
for(int i = 0; i < 8; i++) 
      { 
       modificationScore = [tableauScore objectAtIndex:i]; 
       modificationScore.hidden = NO; 
       modificationScore.center = CGPointMake(modificationScore.center.x, modificationScore.center.y -40); 
      } 

問題是我有一個線程點在「modificationScore = [tableauScore objectAtIndex:i];」線路,我不知道爲什麼。我看到很多話題,但沒有人能幫助我。你有沒有想法?

謝謝!

回答

0

如果你真的不需要它,我不會全局定義modificationScore

我會做:

for(UILabel *tempLabel in tableauScore) 
    { 
     tempLabel.hidden = NO; 
     tempLabel.center = CGPointMake(modificationScore.center.x, modificationScore.center.y -40); 
    } 

我不知道你想達到與chaning的center什麼,需要改變

+0

謝謝你羅蘭,它完美的作品! – alex777771

+0

歡迎您:) –

-3

如果您要更改tableauScore中的對象,則不能使用NSArray,因爲NSArray是不可變的。使用NSMutableArray,重新配置標籤並使用replaceObjectAtIndex:withObject:在數組中更改它們。

+1

他不是突變數組afaik –

+0

那麼,他在上面的代碼... – Mundi

+0

在什麼線上? arrayWithObjects:? –

1

我想通過「線程點」你的意思崩潰?如果是這樣,您添加到陣列的其中一個屬性可能是nil

檢查數組中元素的數量([tableauScore count]),然後再遍歷它們;不要以爲有八個。或者,甚至更好,使用語法來遍歷所有元素:

for (a in tableauScore) { 
0

[NSArray arrayWithObjects:]將最多隻能創建一個NSArray給定的第一nil,所以如果UILabels之一是nil你不會得到大小的數組8,正如你所假設的那樣,但只有一個包含UILabels的數組。

由於你有一個硬編碼的循環大小,你可能會結束在數組之外的索引。