xcode7.x Swift 에 대해서 질문이 있습니다.(reloadData()에 대하여)
조회수 2538회
현재 상황입니다.
제가 구현하고 싶은 부분은 tableViewController에서 셀을 선택하면 그 셀에 맞는 데이터(core data사용 x) 를 collectionView에 있는 변수에 담고 그 내용을 가지고 뷰를 다시 셋팅하는 것입니다.
- tableViewController에서 dinamic으로 셀을 만든 상태입니다.
- collectinViewContoller가 준비되어 있고 초기값은 준 상태입니다. 또한 값을 받기위해 배열이 준비되어 있습니다.
- tableViewController와 collectionViewController는 컨테이너 뷰로 생성되어 있으며 서로간에 segue는 없습니다.
- tableViewController에서 셀을 선택시 함수를 이용해 collectionView의 배열에 단지 값만 넘겨주는 역할만 합니다. 마지막에는 self.collectionView.reloadData() 를 셋팅해 놓았습니다.
- 초기 시작할때는 문제가 없습니다.
질문입니다.
처음 시작시에는 문제가 없지만 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)
2 답변
-
viewDidLoad()에 UICollectionViewFlowLayout를 추가 해보세요.
let aFlowLayout = UICollectionViewFlowLayout() aFlowLayout.itemSize = CGSizeMake(100, 22) self.collectionView.collectionViewLayout = aFlowLayout
autoLayout을 사용하지 않을때 콜렉션뷰에 필수적으로 넣어줘야 되는데, 레이아웃 설정이 초기화가 안되어 있을때 발생하는 오류라 이게 맞는건지 잘 모르겠습니다. 한번 넣어 보시고 되는지 확인 해주세요. 정확한 답변이 아니라서 죄송합니다 ㅠㅠ
-
댓글 입력