2012-12-03 61 views
0

我有NSObjects(mapArray)的陣列,並且對象被聚焦在位置0(MAIN_MAP)。在每個NSObject中,都有一個名爲moonGateArray的NSMutableArray(擁有@property和@synthesize),我添加了另一個名爲Moongate的NSObject。但是,我一直得到零作爲moonGateArray的計數。任何答案爲什麼是這樣?計數是在對象的NSMutable數組返回0

代碼:

for (int i = 0; i < 8; i++) { 
    [[[mapArray objectAtIndex:MAIN_MAP] moonGateArray] addObject:[Moongate new]]; 
} 
[[[[mapArray objectAtIndex:MAIN_MAP] moonGateArray] objectAtIndex:0] setPosition:9 :3]; 
[[[[mapArray objectAtIndex:MAIN_MAP] moonGateArray] objectAtIndex:1] setPosition:16 :8]; 
[[[[mapArray objectAtIndex:MAIN_MAP] moonGateArray] objectAtIndex:2] setPosition:11 :6]; 
[[[[mapArray objectAtIndex:MAIN_MAP] moonGateArray] objectAtIndex:3] setPosition:16 :13]; 
[[[[mapArray objectAtIndex:MAIN_MAP] moonGateArray] objectAtIndex:4] setPosition:13 :10]; 
[[[[mapArray objectAtIndex:MAIN_MAP] moonGateArray] objectAtIndex:5] setPosition:3 :1]; 
[[[[mapArray objectAtIndex:MAIN_MAP] moonGateArray] objectAtIndex:6] setPosition:3 :12]; 
[[[[mapArray objectAtIndex:MAIN_MAP] moonGateArray] objectAtIndex:7] setPosition:22 :17]; 
NSLog(@"%i",[[[mapArray objectAtIndex:MAIN_MAP] moonGateArray] count]); 
+4

你是否初始化了moonGateArray和mapArray? –

回答

0

您可能還沒有初始化或者mapArray或moonGateArray這就是爲什麼你得到0計數。在Objective-C無對象上調用數行的也沒有給出任何異常而是返回0。

希望幫助!

0

但是,對於你的計數= 0,這很簡單,你錯過了alloc/init你使用的任何數組。

您正在創建2D陣列還是3D陣列?

這是造成混淆,讓你的邏輯?

編輯:

如果您MAIN_APP始終爲0,有你爲什麼需要一個數組,一個簡單的對象或代替存儲在二維數組,你可以使用字典。然而,我可以猜測整個邏輯。

我想添加一個關於命名約定的事情......爲Array,Button等變量賦上後綴或前綴變量,您可以使用「maps」,「moonGates」,所有複數都表示它將成爲數組。

0

很可能你沒有正確初始化你的數組。使你更容易,並改變你的代碼,使其更容易閱讀和更容易調試。編寫高度嵌套的方法調用不會得到積分。它會讓你的生活更加艱難。拆分代碼以使事情更簡單。

更改此:

for (int i = 0; i < 8; i++) { 
    [[[mapArray objectAtIndex:MAIN_MAP] moonGateArray] addObject:[Moongate new]]; 
} 

這樣:

// replace "SomeMapClass" with your actual class name 
SomeMapClass *mainMap = mapArray[MAIN_MAP]; 
NSMutableArray *moonArray = mainMap.moonGateArray; 
for (int i = 0; i < 8; i++) { 
    [moonArray addObject:[Moongate new]]; 
} 

現在你可以在調試器中運行該代碼或添加的NSLog語句和驗證過程的每個步驟。

是否mapArray已正確初始化? 是moonArray屬性初始化?

請記住,簡單地定義屬性實際上並不創建對象。你仍然需要初始化它。

+0

我認爲我的問題是moonArray沒有初始化。在moonArray = [NSMutableArray new]之後,計數將變爲8.初始化對象本身時,是否有辦法初始化所有數組(我在Map對象中有其他類似的數組)? – aeubanks

+0

是的,通常這是在'init'方法(或其變體之一)中完成的。 – rmaddy

+0

我在網上查找了自定義初始化,但沒有一個是合理的。是這樣的:' - (id)initWithVariables {moonGateArray = [NSMutableArray new]; [super init]; }'那樣的事情?爲什麼我的其他類(實例變量都是int或boolean)沒有任何問題? – aeubanks