xcode7.x Swift 에 대해서 질문이 있습니다.(reloadData()에 대하여)

조회수 2538회

현재 상황입니다.

  1. 제가 구현하고 싶은 부분은 tableViewController에서 셀을 선택하면 그 셀에 맞는 데이터(core data사용 x) 를 collectionView에 있는 변수에 담고 그 내용을 가지고 뷰를 다시 셋팅하는 것입니다.

    1. tableViewController에서 dinamic으로 셀을 만든 상태입니다.
    2. collectinViewContoller가 준비되어 있고 초기값은 준 상태입니다. 또한 값을 받기위해 배열이 준비되어 있습니다.
    3. tableViewController와 collectionViewController는 컨테이너 뷰로 생성되어 있으며 서로간에 segue는 없습니다.
    4. tableViewController에서 셀을 선택시 함수를 이용해 collectionView의 배열에 단지 값만 넘겨주는 역할만 합니다. 마지막에는 self.collectionView.reloadData() 를 셋팅해 놓았습니다.
    5. 초기 시작할때는 문제가 없습니다.

질문입니다.

처음 시작시에는 문제가 없지만 tableViewController에서 셀을 선택하면 함수가 잘 작동하다 self.collectionView.reloadData() 이후에


import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {  //Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP,  subcode=0x0)

에서 오류가 납니다. 왜 나는것인지 잘 모르겠습니다. 1주일째 막혀있네요....

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'UICollectionView must be initialized with a non-nil layout parameter'
*** First throw call stack:
(
    0   CoreFoundation                      0x000000010c219d85 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x000000010dfbddeb objc_exception_throw + 48
    2   CoreFoundation                      0x000000010c219cbd +[NSException raise:format:] + 205
    3   UIKit                               0x000000010d2b3612 -[UICollectionView initWithFrame:collectionViewLayout:] + 76
    4   UIKit                               0x000000010d2f1622 -[UICollectionViewController _newCollectionViewWithFrame:collectionViewLayout:] + 108
    5   UIKit                               0x000000010d2f07b1 -[UICollectionViewController loadView] + 675
    6   UIKit                               0x000000010cbdc560 -[UIViewController loadViewIfRequired] + 138
    7   UIKit                               0x000000010d2f12e4 -[UICollectionViewController collectionView] + 22
    8   Home Control Client                 0x000000010c010418 _TFC19Home_Control_Client28ControllerListCollectionView21GetZoneControllerListfVCS_13ZoneListBrain4zoneT_ + 1400
    9   Home Control Client                 0x000000010c01731c _TFC19Home_Control_Client13ZoneListBrain23DeliveryAtTheZoneNumberfSiT_ + 620
    10  Home Control Client                 0x000000010c014b78 _TFC19Home_Control_Client17ZoneListTableView9tableViewfTCSo11UITableView23didSelectRowAtIndexPathCSo11NSIndexPath_T_ + 504
    11  Home Control Client                 0x000000010c014bff _TToFC19Home_Control_Client17ZoneListTableView9tableViewfTCSo11UITableView23didSelectRowAtIndexPathCSo11NSIndexPath_T_ + 79
    12  UIKit                               0x000000010cb891c6 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1887
    13  UIKit                               0x000000010cb8941b -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 388
    14  UIKit                               0x000000010ca4df62 _runAfterCACommitDeferredBlocks + 317
    15  UIKit                               0x000000010ca61e4c _cleanUpAfterCAFlushAndRunDeferredBlocks + 95
    16  UIKit                               0x000000010ca6e147 _afterCACommitHandler + 90
    17  CoreFoundation                      0x000000010c13ec37 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
    18  CoreFoundation                      0x000000010c13eba7 __CFRunLoopDoObservers + 391
    19  CoreFoundation                      0x000000010c1347fb __CFRunLoopRun + 1147
    20  CoreFoundation                      0x000000010c1340f8 CFRunLoopRunSpecific + 488
    21  GraphicsServices                    0x00000001108afad2 GSEventRunModal + 161
    22  UIKit                               0x000000010ca41f09 UIApplicationMain + 171
    23  Home Control Client                 0x000000010c01a562 main + 114
    24  libdyld.dylib                       0x000000010ea8192d start + 1
    25  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 
  • 메세지만 봐서는 레이아웃 초기화가 안되어 있어서 나는거 같은데 혹시 소스코드를 볼수 있을까요? myoung 2016.7.29 13:34
  • 추가하여 수정하였습니다. 한경민 2016.7.29 13:53
  • 추가로 레이아웃 초기화가 안되있어서 나는것 같다 는 이야기는 무슨 문제라는 것인가요???? 한경민 2016.7.29 14:00

2 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    viewDidLoad()에 UICollectionViewFlowLayout를 추가 해보세요.

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

    autoLayout을 사용하지 않을때 콜렉션뷰에 필수적으로 넣어줘야 되는데, 레이아웃 설정이 초기화가 안되어 있을때 발생하는 오류라 이게 맞는건지 잘 모르겠습니다. 한번 넣어 보시고 되는지 확인 해주세요. 정확한 답변이 아니라서 죄송합니다 ㅠㅠ

    • 문제가 해결되진 않았지만 그래도 감사드립니다. 한경민 2016.7.29 14:26
    • 추가로 reloadData의 역할에 대해서 알려주세요 한경민 2016.7.29 14:34
  • 해결하셨나요???ㅠㅠㅠ같은문제로 계속 막히네요 ㅠㅠ

    • (•́ ✖ •̀)
      알 수 없는 사용자

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

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

(ಠ_ಠ)
(ಠ‿ಠ)