【问题标题】:Could not cast value of type 'UIBarButtonItem' to 'UITableViewCell'无法将“UIBarButtonItem”类型的值转换为“UITableViewCell”
【发布时间】:2026-02-17 16:15:01
【问题描述】:

有没有人遇到以下错误? 我正在尝试从 uitableviewcontroller 导航到 uiviewcontroller。 uitableviewcontroller 正在使用 NSFetchedResultsController。 应用程序正在中断与 uiviewcontroller 的 segue(名为:TaskDetailViewController)

Repo with Complete Code

错误: 无法将类型“UIBarButtonItem”(0x1a0d22b50)的值转换为“UITableViewCell”(0x1a0d224c0)。 (lldb)

故事板:

Repo with Complete Code

应用中断的代码:

    if segue.identifier == "editTask"
    {
        let cell        = sender as! UITableViewCell
        let indexPath   = tableView.indexPathForCell(cell)

        let taskController:TaskDetailViewController = segue.destinationViewController as! TaskDetailViewController

        let task:Tasks = fetchedResultController.objectAtIndexPath(indexPath!) as! Tasks
        taskController.task = task
    }

【问题讨论】:

    标签: ios swift uitableview segue


    【解决方案1】:

    问题在于这一行:let cell = sender as! UITableViewCell。在这种情况下,当用户按下 UIBarButtonItem 时,您的 segue 似乎正在执行。所以你的发件人是UIBarButtonItem,而不是UITableViewCell。这意味着从sender (UIBarButtonItem) 强制转换(as!)到UITableViewCell 将导致崩溃。

    【讨论】:

    • 我该如何解决这个问题?我的目标是知道要传递给 fetchedResultsController 的单元格总数
    • 您可能只需要更改它,以便在用户选择UITableViewCell 而不是点击UIBarButtonItem 时触发您的segue。当他们点击UIBarButtonItem 时使用不同的转场。您可以采取其他措施来解决此问题,但这可能是最简单的。
    【解决方案2】:

    我猜你添加了 segue 到按钮而不是单元格。

    【讨论】:

      最近更新 更多