UISlider抛出NSRangeException

时间:2017-07-03 20:01:50

标签: swift

尽管将每个滑块的最小值,最大值和当前值设置为故事板中的默认值,但移动滑块会抛出错误,表示该值已以某种方式移动到2.此外,此错误仅在我添加时开始:

var lElbowX = Int()
var rElbowX = Int()
var lElbowY = Int()
var rElbowY = Int()
var lWristX = Int()
var lWristY = Int()
var rWristX = Int()
var rWristY = Int()
var lKneeX = Int()
var lKneeY = Int()
var rKneeX = Int()
var rKneeY = Int()
var lAnkleX = Int()
var lAnkleY = Int()
var rAnkleX = Int()
var rAnkleY = Int()

@IBAction func vertical(_ sender: Any) {//The action function used to be empty
    if jointPicker.selectedRow(inComponent: 2) == 1 {//left
        if jointPicker.selectedRow(inComponent: 1) == 1 {//lNeck
            //nothing yet
        }
        if jointPicker.selectedRow(inComponent: 1) == 2 {//lShoulder
            //nothing yet
        }
        if jointPicker.selectedRow(inComponent: 1) == 3 {//lElbow
            lElbowY = Int((verticalSlider.value - 0.5) * 200)
        }
        if jointPicker.selectedRow(inComponent: 1) == 4 {//lWrist
            lWristY = Int((verticalSlider.value - 0.5) * 200)
        }
        if jointPicker.selectedRow(inComponent: 1) == 5 {//lSpine
            //nothing yet
        }
        if jointPicker.selectedRow(inComponent: 1) == 6 {//lHip
            //nothing yet
        }
        if jointPicker.selectedRow(inComponent: 1) == 7 {//lKnee
            lKneeY = Int((verticalSlider.value - 0.5) * 200)
        }
        if jointPicker.selectedRow(inComponent: 1) == 8 {//lAnkle
            lAnkleY = Int((verticalSlider.value - 0.5) * 200)
        }

    }
    if jointPicker.selectedRow(inComponent: 2) == 2 {//right
        if jointPicker.selectedRow(inComponent: 1) == 1 {//rNeck
            //nothing yet
        }
        if jointPicker.selectedRow(inComponent: 1) == 2 {//rShoulder
            //nothing yet
        }
        if jointPicker.selectedRow(inComponent: 1) == 3 {//rElbow
            rElbowY = Int((verticalSlider.value - 0.5) * 200)
        }
        if jointPicker.selectedRow(inComponent: 1) == 4 {//rWrist
            rWristY = Int((verticalSlider.value - 0.5) * 200)
        }
        if jointPicker.selectedRow(inComponent: 1) == 5 {//rSpine
            //nothing yet
        }
        if jointPicker.selectedRow(inComponent: 1) == 6 {//rHip
            //nothing yet
        }
        if jointPicker.selectedRow(inComponent: 1) == 7 {//rKnee
            rKneeY = Int((verticalSlider.value - 0.5) * 200)
        }
        if jointPicker.selectedRow(inComponent: 1) == 8 {//rAnkle
            rAnkleY = Int((verticalSlider.value - 0.5) * 200)
        }

    }
}
@IBAction func horizontal(_ sender: Any) {//The action function used to be empty
    if jointPicker.selectedRow(inComponent: 2) == 1 {//left
        if jointPicker.selectedRow(inComponent: 1) == 1 {//lNeck
            //nothing yet
        }
        if jointPicker.selectedRow(inComponent: 1) == 2 {//lShoulder
            //nothing yet
        }
        if jointPicker.selectedRow(inComponent: 1) == 3 {//lElbow
            lElbowX = Int((horizontalSlider.value - 0.5) * 200)
        }
        if jointPicker.selectedRow(inComponent: 1) == 4 {//lWrist
            lWristX = Int((horizontalSlider.value - 0.5) * 200)
        }
        if jointPicker.selectedRow(inComponent: 1) == 5 {//lSpine
            //nothing yet
        }
        if jointPicker.selectedRow(inComponent: 1) == 6 {//lHip
            //nothing yet
        }
        if jointPicker.selectedRow(inComponent: 1) == 7 {//lKnee
            lKneeX = Int((horizontalSlider.value - 0.5) * 200)
        }
        if jointPicker.selectedRow(inComponent: 1) == 8 {//lAnkle
            lAnkleX = Int((horizontalSlider.value - 0.5) * 200)
        }

    }
    if jointPicker.selectedRow(inComponent: 2) == 2 {//right
        if jointPicker.selectedRow(inComponent: 1) == 1 {//rNeck
            //nothing yet
        }
        if jointPicker.selectedRow(inComponent: 1) == 2 {//rShoulder
            //nothing yet
        }
        if jointPicker.selectedRow(inComponent: 1) == 3 {//rElbow
            rElbowX = Int((horizontalSlider.value - 0.5) * 200)
        }
        if jointPicker.selectedRow(inComponent: 1) == 4 {//rWrist
            rWristX = Int((horizontalSlider.value - 0.5) * 200)
        }
        if jointPicker.selectedRow(inComponent: 1) == 5 {//rSpine
            //nothing yet
        }
        if jointPicker.selectedRow(inComponent: 1) == 6 {//rHip
            //nothing yet
        }
        if jointPicker.selectedRow(inComponent: 1) == 7 {//rKnee
            rKneeX = Int((horizontalSlider.value - 0.5) * 200)
        }
        if jointPicker.selectedRow(inComponent: 1) == 8 {//rAnkle
            rAnkleX = Int((horizontalSlider.value - 0.5) * 200)
        }

    }
}

调用堆栈:

2017-07-03 12:38:06.856 Exercise Generator[50942:2970421] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 2 beyond bounds [0 .. 1]'
*** First throw call stack:
(
0   CoreFoundation                      0x0000000110352d4b __exceptionPreprocess + 171
1   libobjc.A.dylib                     0x000000010d66521e objc_exception_throw + 48
2   CoreFoundation                      0x00000001102842eb -[__NSArrayM objectAtIndex:] + 203
3   UIKit                               0x000000010db187ba -[UIPickerView selectedRowInComponent:] + 76
4   Exercise Generator                  0x000000010d060734 _TFC18Exercise_Generator12selectorView8verticalfP_T_ + 180
5   Exercise Generator                  0x000000010d062713 _TToFC18Exercise_Generator12selectorView8verticalfP_T_ + 67
6   UIKit                               0x000000010db368bc -[UIApplication sendAction:to:from:forEvent:] + 83
7   UIKit                               0x000000010dcbcc38 -[UIControl sendAction:to:forEvent:] + 67
8   UIKit                               0x000000010dcbcf51 -[UIControl _sendActionsForEvents:withEvent:] + 444
9   UIKit                               0x000000010dda60d4 -[UISlider beginTrackingWithTouch:withEvent:] + 1132
10  UIKit                               0x000000010dcbb893 -[UIControl touchesBegan:withEvent:] + 179
11  UIKit                               0x000000010dba4285 -[UIWindow _sendTouchesForEvent:] + 2043
12  UIKit                               0x000000010dba5c33 -[UIWindow sendEvent:] + 4011
13  UIKit                               0x000000010db529ab -[UIApplication sendEvent:] + 371
14  UIKit                               0x000000010e33f72d __dispatchPreprocessedEventFromEventQueue + 3248
15  UIKit                               0x000000010e338463 __handleEventQueue + 4879
16  CoreFoundation                      0x00000001102f7761 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
17  CoreFoundation                      0x00000001102dc98c __CFRunLoopDoSources0 + 556
18  CoreFoundation                      0x00000001102dbe76 __CFRunLoopRun + 918
19  CoreFoundation                      0x00000001102db884 CFRunLoopRunSpecific + 420
20  GraphicsServices                    0x000000011228ca6f GSEventRunModal + 161
21  UIKit                               0x000000010db34c68 UIApplicationMain + 159
22  Exercise Generator                  0x000000010d0674ef main + 111
23  libdyld.dylib                       0x000000011130268d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

1 个答案:

答案 0 :(得分:0)

看一下堆栈跟踪的前几帧。我将剪切图像和地址列以避免滚动:

'*** -[__NSArrayM objectAtIndex:]: index 2 beyond bounds [0 .. 1]'
*** First throw call stack:
(
0   __exceptionPreprocess + 171
1   objc_exception_throw + 48
2   -[__NSArrayM objectAtIndex:] + 203
3   -[UIPickerView selectedRowInComponent:] + 76
4   _TFC18Exercise_Generator12selectorView8verticalfP_T_ + 180

我们看到您的vertical(_:)方法向选择器视图询问组件中的选定行,并且选择器视图尝试从数组中获取对象。该数组抛出异常,因为它被赋予索引2,但其有效索引仅为0和1。

选择器视图可能有一个组件数组,并且正在尝试从数组中获取组件2,因为(在vertical(_:)中的两个不同位置),您会询问组件2。

我的猜测是你的选择器视图只有两个组件,索引为0和1。