0

我有一个 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]);
4

3 回答 3

0

您可能尚未初始化 mapArray 或 moonGateArray,这就是您获得 0 计数的原因。在objective-c调用nil对象上的count没有给出任何异常,而是返回0。

希望有帮助!

于 2012-12-03T04:50:24.663 回答
0

但是,对于您的计数 = 0,这很简单,您错过了分配/初始化您使用的任何数组。

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

让你的逻辑变得混乱?

编辑:

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

我想再补充一点关于你的命名约定......命名后缀或为你的变量加上数组、按钮等前缀。你可以使用“maps”、“moonGates”,所有复数都象征着它将成为一个数组。

于 2012-12-03T04:52:41.243 回答
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初始化?

请记住,简单地定义一个属性并不会真正创建对象。你仍然需要初始化它。

于 2012-12-03T05:25:43.780 回答