ios - 为什么我会收到此错误 : fatal error - array index out of range?

标签 ios arrays swift for-loop imageview

我有 2 个 View Controller :一个 cameraVC和一个 detailVC .相机是AVFoundation可以捕捉然后选择图片的相机,然后填充 4 个小 imageViews在我的 detailVC .我试图在两个 VC 之间滑动,这样当你在 cameraVC 上点击'yes' 时,然后将其添加到 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]
    }   
}

最佳答案

添加行

imageViewArray = []

在您的 viewWillAppear 的开头。

或者将您对所有 4 个分支中的 imageViewArray 的分配更改为如下内容:

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

您在这里遇到的问题是,当 View 第一次呈现时以及某些呈现的 View 再次被关闭/弹出导致您的 View 再次出现时,该方法被调用。

结果是 imageViewArray 仍然包含上次迭代的 ImageView 。再次添加图像会导致数组变大。

假设第一次有 3 张图片,现在第二次有 4 张图片。因此,您进入最后一个 else 部分并向数组添加 4 个新元素,导致它有 7 个元素,而 imageArray 仍然只有 4 个。现在您遍历所有 imageViewArray 条目并尝试访问 imageArray 最多索引 6,而数组仅包含索引 3 之前的值 -> 崩溃

请注意,写这个答案很烦人,因为你有太多听起来和看起来都一样的变量 imageViewimageimageArray , imageViewArray, ima, imageViewX.请尝试找到更好的名称。

关于ios - 为什么我会收到此错误 : fatal error - array index out of range?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34567630/

相关文章:

ios - 而不是图像,以前的视频(AVPlayer)显示在 ios 的 UIImageView 中

iOS FBSDK 组合 'first_name' 和 'last_name' 获取全名 - 语法问题

arrays - 从 powershell 数组/集合/哈希表中删除一行

html - iOS - UIWebView 加载 HTML 字符串包含 iframe 不起作用

ios - 解析动态 JSON 的模型

ios - scrollView.setContentOffset 在 iOS 12 上的 scrollView.contentInset 之后不起作用

objective-c - 街道地址验证

javascript - Array.join() 有条件

Javascript 数组元素消失

Swift - 自动约束