为什么我会收到此错误:致命错误 - 数组索引超出范围?

时间:2016-01-02 15:42:22

标签: ios arrays swift for-loop imageview

我有2个视图控制器:cameraVCdetailVC。相机是AVFoundation相机,可以拍摄然后选择照片,然后在我的imageViews上填充4个小detailVC。我试图在两个VC之间滑动,以便在cameraVC上点击'是'时,然后将其添加到4 imageViews之一。我目前正在使用for循环来实现这一点,下面是我在我的详细VC中的代码。

当我第一次加载应用并拍摄一些照片时它会起作用,但是当我向后滑动到cameraVC然后再回到我的detailVC时,应用程序崩溃并记录上面的错误。

在我的代码中,我尝试将imageViewArray设置为imageArray中的多个图像。然后每次我回到detailVC,我都要清除imageView.images并重新分配它们。出于某种原因,它不起作用。有什么想法吗?

override func viewWillAppear(animated: Bool) {
    if imageArray.count == 1 {
        imageViewArray += [imageView1]
    } else if imageArray.count == 2 {
        imageViewArray += [imageView1,imageView2]
    } else if imageArray.count == 3 {
        imageViewArray += [imageView1,imageView2,imageView3]
    } else if imageArray.count == 4 {
        imageViewArray += [imageView1,imageView2,imageView3,imageView4]
    }

    for ima in imageViewArray {
        if ima.image != nil {
        ima.image = nil
        }
    }

    for (index, imageView) in imageViewArray.enumerate() {
        imageView.image = imageArray[index]
    }   
}

1 个答案:

答案 0 :(得分:1)

添加行

imageViewArray = []

viewWillAppear

的开头

或者将所有4个分支中的imageViewArray分配更改为:

imageViewArray = [imageView1,imageView2,imageView3,imageView4] // removed the "+"

您在这里遇到的问题是,当第一次显示视图时,以及当某些呈现的视图再次被解除/弹出导致您的视图再次出现时,将调用该方法。

结果是imageViewArray仍然包含上次迭代的图像视图。再次添加图像会使阵列变大。

假设您第一次有3张图像,现在第二次有4张图像。因此,您输入最后一个else部分并向数组添加4个新元素,使其具有7个元素,而imageArray仍然只有4.现在,您遍历所有imageViewArray条目并尝试访问{{1}最高为索引6,而数组只包含值,直到索引3 - >的碰撞

请注意,写这个答案很烦人,因为你有太多的变量听起来都像imageArrayimageViewimageimageArray,{{ 1}},imageViewArray。请尝试找到更好的名字。