viewcontroller中的多个uitableview会出错

时间:2018-05-23 19:42:11

标签: ios swift uitableview

我在以下代码中遇到问题,该代码在viewcontroller中管理两个uitableview。将数据插入'directionTableView'中的模态控制器时,会出现以下错误:

  

主题1:信号SIGABRT   '无法将'UITableViewCell'类型的值(0x1059e7560)转换为'FoodTime.DirectionRecipeTableViewCell'(0x101388bf0)。 2018-05-23 21:50:12.160281 + 0200 FoodTime [4577:360265]无法将'UITableViewCell'(0x1059e7560)类型的值转换为'FoodTime.DirectionRecipeTableViewCell'(0x101388bf0)。'

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    var cell = UITableViewCell()
    if (tableView == self.ingredientTableView)
    {

        let cell = tableView.dequeueReusableCell(withIdentifier: "newIngredientCell", for: indexPath) as! IngredientRecipeTableViewCell

        let ingredientCell = ingredients[indexPath.row]
        cell.textLabel?.text = ingredientCell.titleIngredientRecipe
        cell.detailTextLabel?.text = ingredientCell.subtitleIngredientRecipe
    }
    else if (tableView == self.directionTableView)
    {
        //Thread 1: signal SIGABRT on next line
        let cell = tableView.dequeueReusableCell(withIdentifier: "newDirectionCell", for: indexPath) as! DirectionRecipeTableViewCell                 
        let directionCell = directions[indexPath.row]
        cell.textLabel?.text = directionCell.directionSection
        cell.detailTextLabel?.text = directionCell.directionText
    }
    return cell
}

2 个答案:

答案 0 :(得分:0)

远离第一行的问题

var cell = UITableViewCell()

实际上if语句中返回的单元格是局部变量

所以试试这个

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{

        if (tableView == self.ingredientTableView)
        {

            let cell = tableView.dequeueReusableCell(withIdentifier: "newIngredientCell", for: indexPath) as! IngredientRecipeTableViewCell

            let ingredientCell = ingredients[indexPath.row]
            cell.textLabel?.text = ingredientCell.titleIngredientRecipe
            cell.detailTextLabel?.text = ingredientCell.subtitleIngredientRecipe

             return cell
        }
        else  
        {

            let cell = tableView.dequeueReusableCell(withIdentifier: "newDirectionCell", for: indexPath) as! DirectionRecipeTableViewCell //Thread 1: signal SIGABRT

            let directionCell = directions[indexPath.row]
            cell.textLabel?.text = directionCell.directionSection
            cell.detailTextLabel?.text = directionCell.directionText

            return cell
        }

}

还要确保使用相应的单元格注册每个tableview

答案 1 :(得分:0)

错误我很容易

你声明了这个

var cell = UITableViewCell()

然后你创建一个新的

    let cell = tableView.dequeueReusableCell(withIdentifier: "newIngredientCell", for: indexPath) as! IngredientRecipeTableViewCell

只需删除let

即可

另外

在界面构建器中,确保newDirectionCell的单元格为DirectionRecipeTableViewCell且其他单元格相同

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    var cell = UITableViewCell()
    if (tableView == self.ingredientTableView)
    {

        cell = tableView.dequeueReusableCell(withIdentifier: "newIngredientCell", for: indexPath) as! IngredientRecipeTableViewCell

        let ingredientCell = ingredients[indexPath.row]
        cell.textLabel?.text = ingredientCell.titleIngredientRecipe
        cell.detailTextLabel?.text = ingredientCell.subtitleIngredientRecipe
    }
    else if (tableView == self.directionTableView)
    {
        //Thread 1: signal SIGABRT on next line
        cell = tableView.dequeueReusableCell(withIdentifier: "newDirectionCell", for: indexPath) as! DirectionRecipeTableViewCell                 
        let directionCell = directions[indexPath.row]
        cell.textLabel?.text = directionCell.directionSection
        cell.detailTextLabel?.text = directionCell.directionText
    }
    return cell
}