[UIViewController tableView:numberOfRowsInSection:]:无法识别的选择器发送到实例

时间:2017-04-12 23:42:34

标签: ios swift uitableview

我有一个标签栏视图,它连接到某些项目。

我希望其中一个项目包含TableView,但我不想使用TableViewController,因为我想在页面的顶部添加其他内容。

我的ViewController实施了2个协议UITableViewDataSourceUITableViewDelegate,并包含以下功能:

        func tableView(_ tableView: UITableView, numberOfRowsInSection
      section: Int) ->
    Int {
        // Return the number of rows in the section.
        return annunci.count
     }


   func tableView(_ tableView: UITableView, cellForRowAt indexPath:
      IndexPath) ->
    UITableViewCell {
        let cellIdentifier = "Cell"
        let cell = tableView.dequeueReusableCell(withIdentifier:
         cellIdentifier, for: indexPath)
        // Configure the cell...
        cell.textLabel?.text = annunci[indexPath.row]
        return cell }

然后,从故事板中我添加了一个带有标识符" Cell"并将tableViewviewController链接为DataSource和Delegate。

当我运行应用程序时,它没问题,但是当我选择包含表格视图的项目时,应用程序会抛出此异常:

       *** Terminating app due to uncaught exception   
     'NSInvalidArgumentException', reason: '-[UIViewController   
      tableView:numberOfRowsInSection:
      unrecognized selector sent to instance 0x101c29370'

如何在页面顶部放置一些内容然后使用tableView或如何解决此问题?

我正在使用Swift 3和Xcode 8.2.1

4 个答案:

答案 0 :(得分:6)

如果你没有在故事板中设置视图控制器的类,就会发生这种情况。

在故事板中,选择带有UITableView的视图控制器,然后转到身份检查器(右侧窗格中的第三个选项卡)。确保视图控制器的类设置为自定义类,而不是UIViewController

identity inspector

答案 1 :(得分:2)

对我而言,我忘记了包含代理和数据源。

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { ... }

出于其他原因,see this minimal working version of a UITableView.在新的新项目中运行它并将代码与它进行比较以找到错误。

答案 2 :(得分:1)

在视图控制器的表格视图中提供以下插座连接。 数据源和代理

以下链接的示例: https://code.tutsplus.com/tutorials/table-view-basics--mobile-14038

答案 3 :(得分:0)

我在与您相同的场景中也遇到了这个问题,即使在我的视图控制器中实现了数据源和委托方法,并正确连接了故事板视图控制器。

在我的情况下,在设置 self.tableView.tableHeaderView 之前初始化 self.tableView.tableFooterViewtableView.dataSource 会导致崩溃,因为设置标题视图会触发表视图重新加载。