我有2个视图控制器:cameraVC
和detailVC
。相机是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]
}
}
答案 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 - >的碰撞强>
请注意,写这个答案很烦人,因为你有太多的变量听起来都像imageArray
,imageView
,image
,imageArray
,{{ 1}},imageViewArray
。请尝试找到更好的名字。