我有一个标签栏视图,它连接到某些项目。
我希望其中一个项目包含TableView
,但我不想使用TableViewController
,因为我想在页面的顶部添加其他内容。
我的ViewController
实施了2个协议UITableViewDataSource
和UITableViewDelegate
,并包含以下功能:
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"并将tableView
与viewController
链接为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
答案 0 :(得分:6)
如果你没有在故事板中设置视图控制器的类,就会发生这种情况。
在故事板中,选择带有UITableView
的视图控制器,然后转到身份检查器(右侧窗格中的第三个选项卡)。确保视图控制器的类设置为自定义类,而不是UIViewController
。
答案 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.tableFooterView
或 tableView.dataSource
会导致崩溃,因为设置标题视图会触发表视图重新加载。