我有 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 之前的值 -> 崩溃。
请注意,写这个答案很烦人,因为你有太多听起来和看起来都一样的变量 imageView
、image
、imageArray
, imageViewArray
, ima
, imageViewX
.请尝试找到更好的名称。
关于ios - 为什么我会收到此错误 : fatal error - array index out of range?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34567630/