对象的NSMutableArray中的对象的NSMutableArray的计数返回0

时间:2012-12-03 04:26:36

标签: objective-c xcode

我有一个NSObjects数组(mapArray),正在关注的对象位于0(MAIN_MAP)。在每个NSObject中,都有一个名为moonGateArray的NSMutableArray(有@property和@synthesize),我在其中添加了另一个名为Moongate的NSObject。但是,我一直得到零作为moonGateArray的计数。对于那个原因的答案是什么?

代码:

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]);

3 个答案:

答案 0 :(得分:0)

您可能没有初始化mapArray或moonGateArray,这就是为什么你得到0计数。在objective-c上调用nil对象时,doest不会给出任何异常,而是返回0。

希望有所帮助!

答案 1 :(得分:0)

然而,对于你的count = 0,这很简单,你错过了alloc / init你使用的任何数组。

您是在创建2D阵列还是3D阵列?

让你的逻辑产生混乱?

编辑:

如果您的MAIN_APP始终为0,为什么需要一个数组,一个简单的对象,或者不是存储在2D数组中,您可以使用字典。但是我可以猜到整个逻辑。

我想再添加一个关于你的命名约定的东西...名字后缀或前缀你的变量与数组,按钮等你可以使用“地图”,“moonGates”,所有复数象征着它将是一个阵列。

答案 2 :(得分: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属性是否已初始化?

请记住,简单地定义属性实际上并不创建对象。你仍然需要初始化它。