CollectionViewController를 사용하는 중에 'NSInvalidArgumentException', reason: 'UICollectionView must be initialized with a non-nil layout parameter'이 발생합니다.

조회수 2260회

CollectionViewController

import UIKit

private let reuseIdentifier = "cell"

class ControllerListCollectionView: UICollectionViewController, UICollectionViewDelegateFlowLayout {

    private var selectedZone: ZoneListBrain.zone?
    private var controllerKeys: [String]?

    override func viewDidLoad() {
        super.viewDidLoad()

        let aFlowLayout = UICollectionViewFlowLayout()
        aFlowLayout.itemSize = CGSizeMake(100, 22)
        self.collectionView!.collectionViewLayout = aFlowLayout
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
        return 1
    }

    override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {        if selectedZone?.controller != nil {
            return (selectedZone?.controller?.count)!
        } else {
        return 0//초기값
        }
    }
    override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! ControllerListCell 
        cell.backgroundColor = UIColor.redColor()
        if controllerKeys != nil {
            cell.listLabel.text = controllerKeys![indexPath.item]
            cell.listLabel.textAlignment = NSTextAlignment.Center
            return cell
        }
        return cell
    }

    func GetZoneControllerList(select: ZoneListBrain.zone) {
        selectedZone = select
        controllerKeys = [String](selectedZone!.controller!.keys)
        self.collectionView?.reloadData()//오류 발생지점!

    }
}

오류내용

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'UICollectionView must be initialized with a non-nil layout parameter'

질문입니다. collectionView?.reloadData() 만 사용을 하면 위와같은 오류가 발생합니다. 저는 위와같은 오류로 2주일 가까이 고민하고 있지만 해결을 못하고 있습니다.... 꼭 해결하고 싶습니다. 그리고 collectionView 라고 하는것은 어디에 있는것인가요? 어디에 있는것이길래 이렇게 불러와서 사용을 하는것인지도 궁금합니다.

  • aFlowLayout은 뭔가요??? 그리고 collectionView는ControllerListCollectionView가 상속한 UICollectionViewController에 포함되어 있습니다. 커맨트 키 + UICollectionViewController 클릭 하시면 확인가능합니다. 알 수 없는 사용자 2016.8.2 17:05
  • collectionView에 초기값을 준것입니다. 그렇다면 collectionView는 객체인가요? 함수인가요??? 한경민 2016.8.2 17:39
  • UICollectionViewController에서 선언한 UICollectionView의 객체 입니다. 알 수 없는 사용자 2016.8.2 17:50
  • 아! 그러면 collectionView에 reloadData()라는 함수가 있다는 것이군요. 그리고 저 override func collectionView들은 그 객체를 오버라이드 하는것이구요. 그렇다면 collectionView.reloadData() 함수를 호출한다면 collectionView만 갱신되고 ControllerListCollectionView는 내용이 갱신되지 않는것인가요? 아니면 상속받아서 같이 갱신되는건가요? 한경민 2016.8.2 18:03
  • 제목은 내용이 뭔지 알 수 있는 내용이면 더 좋을것 같습니다. 정토드 2016.8.3 04:04
  • 조금 다르게 이해하고 계시네요. override func은 말그대로 함수를 오버라이드하는 것입니다. collectionView.reloadData()함수를 호출한다면 ControllerListCollectionView의 collectionVIew가 갱신되는 겁니다. 알 수 없는 사용자 2016.8.3 17:43

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)