Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么会出现此错误:致命错误-数组索引超出范围?_Ios_Arrays_Swift_For Loop_Imageview - Fatal编程技术网

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

Ios 为什么会出现此错误:致命错误-数组索引超出范围?,ios,arrays,swift,for-loop,imageview,Ios,Arrays,Swift,For Loop,Imageview,我有两个视图控制器:一个cameraVC和一个detailVC。该相机是一款AVFoundation相机,可以捕获并选择图片,然后在mydetailVC上填充4个小型imageview。我正在尝试在两个VCs之间滑动,这样当您在cameraVC上点击'yes'时,就会将其添加到4个图像视图中的一个。我目前正在使用for循环来实现这一点,下面是我在我的详细VCs中的代码 当我第一次加载应用程序并拍摄几张照片时,它可以工作,但当我刷回我的cameraVC,然后再刷回我的detailVC,应用程序崩溃

我有两个视图控制器:一个
cameraVC
和一个
detailVC
。该相机是一款
AVFoundation
相机,可以捕获并选择图片,然后在my
detailVC
上填充4个小型
imageview
。我正在尝试在两个VCs之间滑动,这样当您在
cameraVC
上点击'yes'时,就会将其添加到4个
图像视图中的一个。我目前正在使用for循环来实现这一点,下面是我在我的详细VCs中的代码

当我第一次加载应用程序并拍摄几张照片时,它可以工作,但当我刷回我的
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]
    }   
}
添加行

imageViewArray = []
视图的开头将出现

或者将所有4个分支中对
imageViewArray
的赋值更改为类似以下内容:

imageViewArray = [imageView1,imageView2,imageView3,imageView4] // removed the "+"
您在这里遇到的问题是,当视图第一次呈现时,以及当某个呈现的视图再次被取消/弹出导致视图再次出现时,会调用该方法

这样做的结果是,
imageViewArray
仍然包含上一次迭代的ImageView。再次添加图像会导致阵列变大

假设您第一次有3个图像,现在第二次有4个图像。因此,您进入最后一个else部分,向数组添加4个新元素,使其具有7个元素,而imageArray仍然只有4个元素。现在,您迭代所有
imageViewArray
条目,并尝试访问索引6处的
imageArray
,而该数组仅包含值,直到索引3->崩溃


请注意,写这个答案很烦人,因为您有太多的变量,所有这些变量的声音和外观都相同
imageView
image
imageArray
imageViewArray
imageViewX
。请尝试找到更好的名称。

为了可读性,我建议在您的
For
语句中,在imageViewArray中使用
而不是
ima
。这将使你的代码在6个月内更容易理解,当你重新使用它时,或者如果其他人试图跟随它。你是一个非常聪明的家伙,非常感谢你的帮助。