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

Posted

技术标签:

【中文标题】-[UIViewController tableView:numberOfRowsInSection:]: 无法识别的选择器发送到实例【英文标题】:-[UIViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 【发布时间】:2016-01-09 10:10:36 【问题描述】:

我对 Swift 很陌生,因为几个月前我才刚刚开始使用它。我对这个错误有一个痛苦的问题。

-[UIViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance XXX

这是我迄今为止收集并实施的可能修复的列表。

    我已将自定义类更改为 CheckboxQuestion 类,而不是 UIViewController 类。

Custom Class

    我已将 tableview 连接到数据源和委托。

    我已经计算了所有松散的参考出口。

    我已经为每个原型单元命名了可重复使用的标识符出口。

prototype cell 1

在所有这些之后,我仍然收到上述错误。

异常错误的断点发生在这一行的appdelegate类中

class AppDelegate: UIResponder, UIApplicationDelegate 

我还有什么遗漏的吗?

这里是 CheckboxQuestion 类代码的代码

import UIKit

var checkboxCellInfo = ["Field 1", "Field 2"]

class CheckboxQuestion: UIViewController 

@IBOutlet weak var tableView: UITableView!

//1. determine number of rows of cells to show data
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int   
    return checkboxCellInfo.count + 1


//2. inputs info into each cell from array 'cellInfo'
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell? 

    if indexPath.row <= checkboxCellInfo.count - 1 

        let cell:CheckboxQuestionCellConnect = self.tableView.dequeueReusableCellWithIdentifier("CheckboxNumber") as! CheckboxQuestionCellConnect

        return cell 

      else 

        let cell:CheckboxQuestionCellConnect = self.tableView.dequeueReusableCellWithIdentifier("CheckboxAdd") as! CheckboxQuestionCellConnect

        return cell

      


//3. determines height of each cell
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
    return 60


override func viewDidLoad() 
    super.viewDidLoad()


override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.


【问题讨论】:

【参考方案1】:

请确保您从代码中删除了出口,而不是从情节提要中删除。只需右键单击情节提要中的表格视图。删除出口并重新连接。可能是您为同一个表格视图添加了两个出口。

【讨论】:

嗨德文德拉。听从你的建议,意识到这是我的一个愚蠢的错误。我有另一个与上面描述的结构相同的视图控制器(RadioButtonQuestion)。我不小心将它的 tableview 连接到数据源并首先委托给情节提要中的 viewcontroller。它给出错误的原因是因为我什至没有创建一个 RadioButtonQuestion 类来适应它!所以错误不是来自原始的 CheckboxQuestion 类,而是来自缺少的 RadioButtonQuestion 类。将从这个惨痛的教训中吸取教训。无论如何,非常感谢!【参考方案2】:

确保您已在下方添加。

class ViewController: UIViewController 
      ,UITableViewDataSource,UITableViewDelegate

还将delegatedatasource连接到stoaryboard中的tableview

【讨论】:

【参考方案3】:

您正在实现UITableViewDelegate/UITableViewDataSource 方法,但您的类似乎不符合其中任何一个。由于您继承自UIViewController,因此您需要添加这些协议并将表格视图的delegatedataSource 设置为self

override func viewDidLoad() 
    super.viewDidLoad()

    tableView.delegate = self
    tableView.dataSource = self

如果视图控制器只显示一个视图控制器,您应该考虑使用UITableViewController 而不是UIViewController,那么上面的内容不适用——您可以通过UITableViewController 免费获得。但我无法从代码中判断是否是这种情况。

【讨论】:

嗯。好的,我已经添加了 UITableViewDelegate/UITableViewDataSource 类如下 class CheckboxQuestion: UIViewController, UITableViewDelegate, UITableViewDataSource 。如何将它们设置为 self? 您是使用带有表格视图的自定义布局还是仅使用全屏表格视图?如果它是全屏的,你应该去UITableViewController,它会为你做这一切。我将在我的答案中添加如何设置委托和数据源。 我正在使用自定义布局。 Container View 内有 Text View 和 Table View。【参考方案4】:

我认为在这种情况下,您可能忘记将 tableview 委托和数据源分配给 self。

self.tableView.dataSource = self

self.tableView.delegate = self

【讨论】:

试过了。还是没有成功。 @kiwidude89 你是否对两个表格视图单元格使用相同的类名..你有没有采取任何出口它单元格..你能显示你的单元格类 是的,我正在使用相同的课程。这是代码。 import UIKit class CheckboxQuestionCellConnect: UITableViewCell @IBOutlet weak var orangeButton: UIButton! @IBOutlet weak var plusButton: UIButton! override func awakeFromNib() super.awakeFromNib() override func setSelected(selected: Bool, animated: Bool) super.setSelected(selected, animated: animated) 【参考方案5】:

你可能错过了 UITableView 协议的实现,确保你实现了协议你需要实现。

    UITableViewDelegate UITableViewDataSource

在 h 文件上添加协议实现:

@interface YourClass : UIViewController <UITableViewDelegate,UITableViewDataSource>

@end

在 m 文件上添加所需的方法:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

【讨论】:

【参考方案6】:

就我而言,我提供了: 1.所有网点都对, 2. 数据源和委托权,

我缺少的是: 我没有在情节提要中提供 UIViewController 的类和情节提要标识符。因此它显示

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

因为普通的 UIViewController 没有这些方法,所以当我们符合 UITableViewDatasource 时,我们会在我们自定义的 UIViewController 类中提供。

所以请检查情节提要中 UIViewController 的身份检查器并在那里提供正确的类。

考虑下图:

【讨论】:

【参考方案7】:

有时您会在不同的视图控制器中添加相同的类名。其中一个 viewcontroller 有一个 tableview。

【讨论】:

【参考方案8】:

有时您没有将文件与情节提要相关联。

【讨论】:

【参考方案9】:

确保你的控制器中有这个。

extension NameController: UITableViewDelegate // code...

extension NameController: UITableViewDataSource // code...

【讨论】:

【参考方案10】:

在我的例子中,我没有将情节提要中的 ViewController 连接到我的自定义类

【讨论】:

以上是关于-[UIViewController tableView:numberOfRowsInSection:]: 无法识别的选择器发送到实例的主要内容,如果未能解决你的问题,请参考以下文章

R data.table v1.9.6 中的错误 - 函数“fread”

在主 UiViewController 中动态声明子 UiViewController

从另一个 UIViewController 推送一个 UIViewController - 如何?

从另一个 UIViewController 呈现 UIViewController

使用 IBAction UIViewController 弹出 UIViewController

子 UIViewController 视图阻止容器 UIViewController 视图接收触摸事件