2012-12-04 46 views
0

我想將UIButton對象添加到數組,但他們沒有這樣做。每當我調用[像素計數]或[顏色計數]它返回0.我嘗試使用[self.arrayName addObject:myObject]和[arrayName addObject:myObject],但似乎都沒有工作。我對Objective-C非常陌生,所以它可能在我看來很愚蠢,但是這已經讓我停留了一個多小時。無法讓addObject在NSMutableArray上工作

這裏是ViewController.h

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController { 
NSMutableArray *pixels; 
NSMutableArray *colors; 
} 
@property (nonatomic, retain) NSMutableArray *pixels; 
@property (nonatomic, retain) NSMutableArray *colors; 
@end 

代碼這裏是從ViewController.m相關代碼

int x = 30; 
int y = 60; 
for(int i=0; i<10; i++) { 
     UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(x,y,20,20)]; 
     [self.pixels addObject:button]; 
     x += 20; 
     y += 20; 
} 

我有整個工程壓縮了其可以在這裏下載: http://mdl.fm/pixelated.zip

在此先感謝任何可以幫助到的人!

+7

你有沒有初始化你的數組? – rdelmar

+0

我會在哪裏初始化它們?我在ViewController.h中試過,但它一直在說Expected「;」在聲明列表的末尾。我也在ViewController.m的init()和ViewController.m的viewDidLoad()裏面嘗試了它,但都沒有成功。 – SISYN

+0

正確,零目標消息被忽略(NSControl除外)。 –

回答

4

嘗試加入這個在您嘗試使用數組前:

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

陣列中的OBJ-C需要在使用前進行初始化。由於在nil實例上調用方法只是在Obj-C中返回0,所以很容易做到這一點,直到你的數組沒有存儲你認爲應該做的事情時纔會注意到。

編輯從添加註釋信息:

你可以把初始化到-ViewDidLoad方法,讓他們準備去,一旦ViewController本身已準備就緒。確保你retain他們,所以他們不會自動垃圾收集。

+0

但正如@rdelmar所指出的那樣,它的完成與做它同樣重要。 – trudyscousin

+0

你會推薦這個嗎?如果我把它放在viewDidLoad中,它只會在該方法內部可用。我還有另一個問題。當我使用[顏色addObject:colorObject]它將添加到數組罰款,但它給了我一個警告消息,說「本地聲明的'顏色'隱藏實例變量」。我可以通過將其更改爲[self.colors addObject:colorObject]來消除錯誤,但不會將其添加到數組中。有什麼建議麼?感謝您的幫助。 – SISYN

+0

將數組的名稱從「顏色」更改爲不太可能與其他變量名稱相沖突的項目。例如,ColorArr。 – Almo

2

您在初始化方法中初始化了像素 - init不會在您在故事板中設置的控制器中調用。將其更改爲initWithCoder:或將數組初始化移至viewDidLoad。