我在表格单元格中有一个按钮,按下它会导致应用程序崩溃并显示错误:
无法识别的选择器发送到实例0x7f9a39840a00 2016-11-25 15:32:04.310 App Name [19161:1264937] ***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [App_Name.routineCell forwardPress:]:无法识别的选择器发送到实例0x7f9a39840a00'< / p>
以下是代码:
internal func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
return routineGroups.count
}
func cellButtonPress() {
print("works")
}
internal func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
let cell:routineCell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! routineCell
cell.textLabel?.text = routineGroups[indexPath.row]
cell.forwardButton.tag = indexPath.row
cell.forwardButton.addTarget(self, action: #selector(routinesGroups.cellButtonPress), for: UIControlEvents.touchUpInside)
return cell
}
我在这里查看了解决方案:Link1和Link2但我每次都得到同样的错误。 单元格有自己的.swift文件,它作为插座拖动: Cell.swift file
当崩溃发生时,Xcode将我带到AppDelegate.swift并显示:crash goto
有谁知道如何解决这个问题?
答案 0 :(得分:1)
似乎问题是关于forwardPress
,而不是forwardButton
还是cellButtonPress
。您是否在Interface Builder中检查了Outlet Inspector?
在某些界面元素(可能是读取调试器时的单元格)上,您可能在名为forwardPress
的代码中没有链接的插座。您对元素执行操作,IB查找forwardPress
方法,该方法不存在=&gt;崩溃。
答案 1 :(得分:-1)
对于UIButton
中的UITableViewCell
操作,您可以使用:
方法-1 - 使用关闭,即使在CustomTableViewCell
本身也可以轻触按钮。
CustomTableViewCell
上课:
class CustomTableViewCell: UITableViewCell
{
@IBOutlet weak var forwardButton: UIButton!
var completionHandler : (()->())?
@IBAction func cellButtonPressed(_ sender: UIButton)
{
if let handler = self.completionHandler
{
handler()
}
}
}
UITableViewDataSource
方法:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "CustomTableViewCell", for: indexPath) as! CustomTableViewCell
cell.completionHandler = {[weak self] in self?.cellButtonPress()}
return cell
}
方法-2 - 在控制器级别处理按钮点击事件。
UITableViewDataSource
方法:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "CustomTableViewCell", for: indexPath) as! CustomTableViewCell
cell.forwardButton.addTarget(self, action: #selector(cellButtonPress), for: .touchUpInside)
return cell
}