准备隔离:发件人是“表视图”而不是“表视图”单元格

时间:2019-03-27 20:16:54

标签: swift xcode uitableview

我正在尝试通过3D触摸实现Peek&Pop功能。我正在遵循Apple Website上的指导。

它说我应该通过以下方式在准备segue方法中获取当前选定单元格的索引路径:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard let selectedTableViewCell = sender as? UITableViewCell,
         let indexPath = tableView.indexPath(for: selectedTableViewCell)
         else { preconditionFailure("Expected sender to be a valid table view cell") }

但是,当我打电话给我时,我得到了前提条件错误。我检查了sender的值,实际上,它不是一个表格视图单元格,而是我的表格视图控制器。

当我这样获得索引路径时:

guard let indexPath = tableView.indexPathForSelectedRow else {fatalError()}

当我简单地选择表格视图单元格时它就起作用。当我尝试偷看时不起作用。它向我显示了偷看的表视图,但是它是空的。我期望如此,因为Apple文档确实提到indexPathForSelectedRow在窥视时返回nil。

我不知道第一种方法在做什么,为什么发件人是Table View Controller而不是Table View Cell。谢谢。

2 个答案:

答案 0 :(得分:0)

要使此代码正常工作,您必须通过 ctrl -从表格视图单元格拖动而不是从 view控制器连接segue >。

答案 1 :(得分:0)

目前尚不清楚为什么按照@vadian建议更改代码后会发生此错误。

那也是我唯一的主意。我们应该看到其余的代码,我认为那一定是一个问题。没有那个,我想没人能说很多话。

但是,我认为您可以采取一些措施(尽管这不能解决您的原始问题): 如果您按照上述的说明操作Apple教程,则已经在previewingContext(_:viewControllerForLocation:)方法中设置了索引路径。如果可行,您也许可以在此处处理所需的数据。当您选择其他VC时,您可以使用indexPathForSelectedRow,正如您所提到的,它在您选择时有效,但在窥视时不起作用。 没有看到其余的代码,这是我能做的最好的事情。