0

我有一个像玩家一样的“蛇游戏”,当身体达到一定长度时移除末端尾部时我遇到了一些问题。现在我有这个:

if (i > maxHealth) {
    id object = [tail objectAtIndex:i-maxHealth-1];
    [tail removeObject:object];//This part doesn't work, if I comment this line out it works but the object is still in the array 
    [self.tileMap removeChild:object cleanup:YES];
}

i场景初始化时“蛇”的长度i等于 0 并且玩家移动它时“蛇”的长度在哪里,将“尾巴”图像添加到场景和名为tail的 NSMutableArray中。我在调试器中得到了这个:

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM insertObject:atIndex:]: index 4 beyond bounds [0 .. 2]'

这对我来说没有任何意义,因为在我添加线以从数组中删除精灵并仅用于object从场景中删除精灵之前它工作正常。

4

1 回答 1

1

您应该学习如何使用断点来识别代码中的正确位置,因为很明显,您的问题不是您认为的那一行:

[__NSArrayM insertObject:atIndex: ]: 索引 4 超出范围 [0 .. 2]'

它基本上告诉你所有需要知道的:你试图在一个只有三个索引 (0,1,2) 的数组的索引 4 处插入一个对象。因此,您对removeObject的调用不是您获得异常的原因,而是此异常的原因,稍后在您尝试插入 Object时发生。

我猜索引显然是错误的,因为您在之前的步骤中删除了索引 3 或 4 处的对象,但没有更新有效索引。

要解决这类问题,我建议转到 Xcode 中的 Breakpoints Navigator (cmd+6) 并单击左侧的小底部“+”和“Add Exception Breakpoint”设置为“all”。运行您的代码,调试器将在异常发生的地方弹出。

于 2012-08-01T20:47:23.513 回答