2016-01-02 41 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

你是一個非常聰明的傢伙,非常感謝你的幫助。 –

相關問題