2010-07-23 62 views
0

烏姆這麼簡單的問題在這裏:簡單NSMutable陣列的問題

我已經NSMutableArray的實例在我的頭部聲明

NSMutableArray *day19; 

@property (nonatomic, retain) NSMutableArray *day19 

實現:

@synthesize day19; 

在我的viewDidLoad

self.day19 = [[NSMutableArray alloc] init]; 

在這裏我想對象添加到陣列的I的myMethod的:

NSObject *newObject = [[NSObject alloc] init]; 

[day19 addObject:newObject]; 

但是......當我檢查day19陣列沒有什麼了。如果我反過來將newObject添加到myMethod範圍內的tempArray,然後將day19數組設置爲tempArray,則day19具有這些對象。

超級基本我知道剛纔一定是迷茫早晨或東西...

感謝您的幫助

+0

打出一個像這樣的Objective-C教程:http://www.otierney.net/objective-c.html#nsarray – 2010-07-23 19:00:46

+0

我有和我在本地範圍案例中的所有測試正常工作...但如果我嘗試將一個對象添加到類實例變量中......沒有任何粘附。 – theprojectabot 2010-07-23 19:05:52

+0

非原子應該是非原子的,並且在NSObject行上有不匹配的方括號。 – Kurbz 2010-07-23 19:13:25

回答

0

在我的viewDidLoad

self.day19 = [[NSMutableArray alloc] init]; 

在myMethod的,我想給對象添加到陣列的I:

NSObject *newObject = [[NSObject alloc] init]; 

[day19 addObject:newObject]; 

但是......當我檢查day19陣中還有什麼在裏面。如果我反過來將newObject添加到myMethod範圍內的tempArray,然後將day19數組設置爲tempArray,則day19具有這些對象。

讓我猜:你檢查的代碼數組是這樣的:

NSLog(@"day19 contains %lu objects", [day19 count]); 

請記住,一個消息nil沒有任何行爲返回nil0,或0.0。這就是爲什麼輸出表示0個對象的原因:首先你沒有數組。最可能的原因是viewDidLoad還沒有被調用,所以你還沒有創建可變數組。

當你檢查數組時,你有一個數組(也就是視圖已經被加載),但你還沒有一個數組(視圖還沒有被加載)當你嘗試添加到數組中時,所以你的消息聽不到。

考慮先前創建數組。您可能應該在initinitWithCoder:中創建它。

第三種可能性是您在添加之前檢查過該陣列。確保你在兩點都記錄或者中斷,這樣你就知道哪一個先發生了。

無論問題是什麼,您還需要將數組分配給實例變量,而不是屬性,或者在將數組分配給屬性之前自動釋放數組。否則,你會過度保留這個數組,這意味着你稍後可能會泄漏它。您可能需要查看Memory Management Programming Guide for Cocoa

+0

再次與偉大的答案。我以前實際上已經弄清楚了,但是這正確地解釋了我的錯誤。我在運行該方法之前,實際alloc'in和init'n我的ViewDidLoad方法中添加對象到我的數組。簡單的複製粘貼錯誤。謝謝你的偉大答案。 – theprojectabot 2010-07-24 20:01:58

1

day19實際上是一個實例變量?在代碼片段中,不清楚它何時被聲明爲實例變量,或者只是作爲類的範圍之外的變量。

1

幾件事情:

確定viewDidLoad是初始化您的陣列正確的地方?授予here

另外,至少從你發佈的代碼看,你看起來像是在保留你的馬虎。如果你的財產是一個保留類型,你不應該寫:

self.myProperty = [[Something alloc] init]; // double retain here, bad 

而應該被寫一樣的東西:

self.myProperty = [[[Something alloc] init] autorelease]; // single, good 

而且,與

NSObject *newObject = [[NSObject alloc] init]; 
[day19 addObject:newObject]; 

,除非你有一個

[newObject release]; 

down派克,你有內存泄漏。