我有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]
}
}
最佳答案
添加行
imageViewArray = []
在
viewWillAppear
的开头。或将所有4个分支中的
imageViewArray
分配更改为类似以下内容:imageViewArray = [imageView1,imageView2,imageView3,imageView4] // removed the "+"
您在这里遇到的问题是,在首次显示视图时以及在某些显示的视图被关闭/再次弹出时调用该方法,从而导致您的视图再次出现。
结果是
imageViewArray
仍然包含上次迭代的图像视图。再次添加图像会使数组变大。假设您第一次有3张图像,现在第二次有4张图像。因此,您输入最后一个else部分,并向该数组添加4个新元素,从而使它具有7个元素,而imageArray仍然只有4个元素。现在,您遍历所有
imageViewArray
条目,并尝试以最高索引6访问imageArray
,而数组仅包含值,直到索引3-> crash 为止。请注意,写这个答案很烦人,因为您有太多变量,它们听起来和外观都相同
imageView
,image
,imageArray
,imageViewArray
,ima
,imageViewX
。请尝试查找更好的名称。