2016-01-02 76 views
1

我有2个视图控制器:一个cameraVC和一个detailVC。该相机是一个AVFoundation相机,可以捕捉并选择图片,然后在我的detailVC上填充4个小的imageViews。我试图在两个VC之间滑动,以便当您在cameraVC上点击'是'时,然后将其添加到4 imageViews之一。我目前使用for-loops来实现这一点,下面是我在我的详细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

为了便于阅读,我建议在'for'语句中,使用'imageViewArray'中的图像而不是'ima'。当你回到它的时候或者其他人正试图跟随时,它会让你的代码在6个月内更容易找到。 – Adrian

回答

1

添加行

imageViewArray = [] 

viewWillAppear的开始。

或改变一些你的任务在所有4个分公司的imageViewArray

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

您遇到这里的问题是,当视图被呈现在第一时间和时所给出的一些方法被调用视图会被解散/弹出,导致视图再次出现。

结果是imageViewArray仍包含上次迭代的图像视图。再次添加图像会导致阵列变大。

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

注意,这是恼人的写作这个答案,因为你有太多的变数,所有的声音和看起来一样imageViewimageimageArrayimageViewArrayimaimageViewX。请尽量找到更好的名字。

+0

你是一个非常聪明的家伙,非常感谢你的帮助。 –

相关问题