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


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 라고 하는것은 어디에 있는것인가요? 어디에 있는것이길래 이렇게 불러와서 사용을 하는것인지도 궁금합니다.

  • 2016년 08월 03일에 수정됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.
  • 2016년 08월 01일에 작성됨

  • aFlowLayout은 뭔가요??? 그리고 collectionView는ControllerListCollectionView가 상속한 UICollectionViewController에 포함되어 있습니다. 커맨트 키 + UICollectionViewController 클릭 하시면 확인가능합니다.    gompro89   2016.8.2 17:05     
  • collectionView에 초기값을 준것입니다. 그렇다면 collectionView는 객체인가요? 함수인가요???    한경민   2016.8.2 17:39     
  • UICollectionViewController에서 선언한 UICollectionView의 객체 입니다.     gompro89   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가 갱신되는 겁니다.     gompro89   2016.8.3 17:43     
조회수 261


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close