위 에러는 스토리보드와 연결된 컨트롤러 파일을 삭제했기 때문에 발생했습니다.
만약 저처럼 컨트롤러 파일을 삭제한 케이스가 아니라면 스토리보드와 연결된 것들을 살펴보시면 좋을 것 같아요. 반드시 컨트롤러 파일 때문에 생기는 메시지는 아닐 수도 있습니다.
storyboard 없이 코드만으로 원하는 테이블 뷰를 구현하는 과정을 연습하는 중이었습니다. 앱을 구동하면 실행은 잘 되고 멈추는 것도 아닌데도, 뭔가의 메시지를 보여주더라구요. 첫번째 이미지처럼요.
게다가 원하는 뷰까지는 진입했는데, 막상 테이블 셀을 불러오지 못하는 문제가 있었습니다. 메시지가 뜨면서 테이블 셀을 불러오지 못하다 보니, 처음에는 자연스럽게 해당 메시지 때문에 테이블 셀을 불러오지 못한다고 추측을 했었어요.
메서드마다 print 를 넣어가며 체크하기 시작했습니다. tableView 메서드 중 numberOfRowsInSection은 호출이 되는데 cellForRowAt은 호출이 안되더라구요.
// numberOfRowsInSection은 호출이 되는데 cellForRowAt은 호출이 안됨.. why??
func tableView(_ tableView:numberOfRowsInSection:) -> Int
func tableView(_ tableView:cellForRowAt:) -> UITableViewCell
결론을 보셨겠지만 이 문제는 위 에러(?)와는 전혀 관련이 없었습니다. 하.. 뭔가의 문제가 생긴 상황에서 에러같은 메시지가 나타나다 보니 너무 당연하게 연결을 지었던게 문제였죠.
메서드 호출이 되지 않던 문제의 원인은 필요한 오토 레이아웃 중 일부가 누락된 데 있었습니다. 코드로 작성할 경우 시각적인 피드백을 받기 어려운 만큼 조금 더 꼼꼼하게 살펴볼 필요가 있겠다는 경험을 얻게 되었네요.
스토리보드 없이 뷰를 구현할 때, 원하는 뷰가 로드되지 않는다면 오토레이아웃을 잘 적용해 주었는지 체크하자!
오토레이아웃이 제대로 적용되지 않은 경우에도 func tableView(_ tableView:numberOfRowsInSection:) -> Int
메서드는 잘 호출이 되었었습니다. 그것도 무려 2번이나요! 더 웃긴 건 문제를 해결하고 나서 해당 메서드를 호출하니 무려 4번이나 호출이 되었습니다. 셀의 갯수와는 관계 없이 말이죠.
글을 작성하면서 추가적으로 더 찍어보니, 메서드가 호출되는 순서나 횟수에 어떤 의미가 있는지 도저히 감을 잡기 어렵더라구요. 테이블 뷰 컨트롤러가 동작하는 과정과 그 생명주기에 대해 더 찾아봐야할 것 같습니다.