-[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
还将delegate
和datasource
连接到stoaryboard中的tableview
。
【讨论】:
【参考方案3】:您正在实现UITableViewDelegate
/UITableViewDataSource
方法,但您的类似乎不符合其中任何一个。由于您继承自UIViewController
,因此您需要添加这些协议并将表格视图的delegate
和dataSource
设置为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