我有一个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]);
答案 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
属性是否已初始化?
请记住,简单地定义属性实际上并不创建对象。你仍然需要初始化它。