我是Swift的新手,因为我在几个月前开始研究它。这个错误我有一个疼痛的问题。
-[UIViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance XXX
以下是我目前收集和实施的可能修复程序列表。
CheckboxQuestion
类而不是UIViewController
类。 我已将tableview连接到数据源并委托。
我已经考虑了所有松散的引用网点。
我为每个原型单元命名了可重复使用的标识符出口。
在所有这些之后,我仍然得到上述错误。
此行的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.
}
}
答案 0 :(得分:5)
请确保您已从代码中删除了插座,但未从故事板中删除。只需从storyboard .delete outlet右键单击tableview并重新连接。可能您已为同一个tableview添加了两个插座。
答案 1 :(得分:3)
您正在实施UITableViewDelegate
/ UITableViewDataSource
方法,但看起来您的类似乎不符合其中任何一种方法。由于您继承自UIViewController
,因此您需要添加这些协议,并将表格视图的delegate
和dataSource
设置为self
:< / p>
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
如果视图控制器只显示一个视图控制器,你应该考虑使用UITableViewController
而不是UIViewController
,那么上面的内容并不适用 - 你可以免费获得{ {1}}。但是我不能从代码中判断出是这种情况。
答案 2 :(得分:2)
我认为在这种情况下,您可能忘记将tableview委托和数据源分配给self。
self.tableView.dataSource = self
self.tableView.delegate = self
答案 3 :(得分:2)
请确保您已添加以下内容。
class ViewController: UIViewController
,UITableViewDataSource,UITableViewDelegate{
并且还将delegate
和datasource
连接到了stoaryboard中的tableview
。
答案 4 :(得分:0)
有时您会在不同的viewcontroller中添加相同的类名。其中一个viewcontroller有一个tableview。
答案 5 :(得分:0)
您可能错过了UITableView协议的实现,请确保已实现协议。
在h文件上添加协议实现:
@interface YourClass : UIViewController <UITableViewDelegate,UITableViewDataSource>
@end
在m文件上添加必需的方法:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
答案 6 :(得分:0)
有时您没有将文件与情节提要板连接起来。
答案 7 :(得分:0)
就我而言,我提供了: 1.所有网点都正确, 2.数据源和委托权,
我所缺少的是: 我没有在情节提要中提供UIViewController的类和情节提要标识符。因此显示
-[UIViewController tableView:numberOfRowsInSection:]:无法识别的选择器已发送到实例
因为普通的UIViewController没有这些方法,所以当我们遵循UITableViewDatasource时,我们在自定义UIViewController类中提供了它。
因此,请在情节提要中检查UIViewController的身份检查器,并在其中提供正确的类。
请考虑以下图片:
答案 8 :(得分:0)
确保你的控制器中有这个。
extension NameController: UITableViewDelegate { // code... }
extension NameController: UITableViewDataSource { // code... }