Swift / xCode错误EXC_BAD_INSTRUCTION(代码= EXC_1386_INVOP,子代码

时间:2017-10-23 19:14:04

标签: swift xcode

我是iOS编程新手,目前正在Udacity(PitchPerfect)上进行xCode和Swift教程的介绍。我们正在构建一个简单的双视图应用程序,它将录制语音(第一个ViewController),然后在第二个VC上播放它。

作为教程的一部分,我们应该在我们的项目中添加一个扩展(AVAudioPlayerDelegate),它允许第二个VC以不同的效果(例如,快,慢,回声,混响等)播放音频。将此扩展文件(称为playsoundsviewcontroller-audio.swift)添加到我的xCode项目导致以下运行时崩溃:

线程1:EXC_BAD_INSTRUCTION(代码= EXC_1386_INVOP,子码

附加了代码段和屏幕截图。注意,我没有修改此扩展名,除了4个打印命令 - 我只是根据课程讲师的指示将其导入我的项目中。控制台显示“索引超出范围”,问题显然是“节点[x + 1]。”我还打印出一些变量来帮助解决这个问题,包括x,nodes.count和节点数组。

任何人都知道为什么这不起作用?对于经验丰富的程序员来说可能很容易找到...

func connectAudioNodes(_ nodes: AVAudioNode...) {
    for x in 0...nodes.count-1 {
        audioEngine.connect(nodes[x], to: nodes[x+1], format: audioFile.processingFormat)
    }
}

image

1 个答案:

答案 0 :(得分:1)

在循环中

for x in 0...nodes.count-1 {

与推荐的运算符相同

for x in 0..<nodes.count {

在最后一次迭代中x是最后一个索引而x+1 超出范围会导致异常。

解决方案是迭代直到第二个最后一个索引

for x in 0..<nodes.count-1 {