[Xcode / Swift] tableView의 DataSource ViewController와 연결하기

TableView와 ViewController을 연결하는 과정에서 아래와 같은 오류 메세지가 나오면서 TableView가 ViewController와 연결되지 않은 문제가 있어 이 글을 씀.

‘-[LottoDrawExample.ViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x7fe601d20650’


오류의 문제점

필자의 경우, delegate 부분을 제외하고 dataSource만 View Controller와 연결하고자함. 아래 오류의 문제점은 말 그대로 인식할 수 없는 selector가 instance로 연결되었음. 즉, UITableViewDataSource 프로토콜의 필수적인 Method들이 ViewController.swift에서 구현되지 않음.

'-[LottoDrawExample.ViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x7fe601d20650'


1. UITableViewDataSource Populating

dataSource는 해당 뷰에서 사용하는 데이터 관련 Method를 포함하는 UITableViewDataSource 프로토콜을 구현하여야함. (delegate의 경우, UITableViewDelegate를 구현해야함)

즉, Class 선언 부분이 아래와 둘 중 하나와 같아야함.

class ViewController: UITableViewController

혹은 (UITableViewDelegate는 delegate를 연결 했을시만)

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate

2. UITableDataSource에 필수적인 함수들을 구현

공식 개발 문서에서 볼 수 있듯이 Required가 붙어있는 두 함수는 필수적으로 구현해 주어야함. 아래 공식 홈페이지 링크를 따라 가면 코드가 나오니 복사하면 됨.

필자의 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    func numberOfSectionsInTableView(in tableView: UITableView) > Int
    {
        return 1
    }
    func tableView(_ tableView: UITableView,
                   numberOfRowsInSection section: Int> Int
    {
        return 0
    }
    func tableView(_ tableView: UITableView,
                   cellForRowAt indexPath: IndexPath) > UITableViewCell
    {
        let cell = UITableViewCell()
        return cell
    }
}
cs

3. _ 부분이 in으로 변경

아래와 같이 _부분이 in으로 변경됨에 따라 in을 써주어야함.

변경 전

func numberOfSections(_ tableView: UITableView) -> Int

변경 후,

optional func numberOfSections(in tableView: UITableView) -> Int

참조

댓글 남기기