这个错误一直出现在我的代码中,我无法弄清楚如何解决它

时间:2017-06-05 23:43:04

标签: swift3 sprite-kit xcode8 ios10

我正在使用swift 3在Xcode 8中创建一个ios游戏应用程序并且我不断收到错误消息“Thread 1:EXC_BAD_INSTRUCTION(codeEXC_1386_INVOP,subcode = 0x0)”以及一条致命错误的控制台消息:“索引输出范围(lldb)“。有谁知道如何解决这个问题?

这是带错误的代码部分。我在'let nodeB = cableSegments [i]'

这一行上得到它
for i in 1..<length {
        let nodeA = cableSegments[i - 1]
        let nodeB = cableSegments[i]
        let joint = SKPhysicsJointPin.joint(withBodyA: nodeA.physicsBody!, bodyB: nodeB.physicsBody!,
                                            anchor: CGPoint(x: nodeA.frame.midX, y: nodeA.frame.minY))

        scene.physicsWorld.add(joint)
    }

1 个答案:

答案 0 :(得分:2)

“超出范围”错误在许多编程语言中很常见。它向您指示循环正在尝试访问数组中超出数组范围的位置。

根据上面的代码,您无法确定在哪里获得length值,但它应该是数组长度。

可以使用以下代码:

var counter = 0

for i in 0..<cableSegments.count {

    counter += 1

    if counter == cableSegments.count {
        break
    }

    let nodeA = cableSegments[i]
    let nodeB = cableSegments[i + 1]
    let joint = SKPhysicsJointPin.joint(withBodyA: nodeA.physicsBody!, bodyB: nodeB.physicsBody!,
                                        anchor: CGPoint(x: nodeA.frame.midX, y: nodeA.frame.minY))

    scene.physicsWorld.add(joint)
}