Iphone 自定义单元格:致命错误:在展开可选值时意外发现nil

Iphone 自定义单元格:致命错误:在展开可选值时意外发现nil,iphone,ios7,swift,Iphone,Ios7,Swift,我有一个带有自定义单元格的表视图,创建为.xib。我没有使用故事板。我有一个问题,我不能用来自webservice结果的数据填充我的表。另外,我在自定义单元格中有4个标签。在我的自定义单元格类中,当我尝试为每个项目设置标签时,它会给我上面提到的致命错误 这是我的密码: class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { ... func tableView(tableView:

我有一个带有自定义单元格的表视图,创建为.xib。我没有使用故事板。我有一个问题,我不能用来自webservice结果的数据填充我的表。另外,我在自定义单元格中有4个标签。在我的自定义单元格类中,当我尝试为每个项目设置标签时,它会给我上面提到的致命错误

这是我的密码:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
...

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!
{
        let cell: ItemManagementTVCell = tableView?.dequeueReusableCellWithIdentifier("cell") as ItemManagementTVCell

    if let ip = indexPath
    {
        let item: Item = self.itemList[indexPath.row] as Item
        cell.setCell(item.itemName, status: item.itemStatus, duration: item.itemDuration, price: item.itemPrice)
    }
    return cell
}
}
我的自定义单元格类在这里:

导入UIKit

class ItemManagementTVCell: UITableViewCell {

    @IBOutlet var lblItemName: UILabel!
    @IBOutlet var lblItemPrice: UILabel!
    @IBOutlet var lblItemDuration: UILabel!
    @IBOutlet var lblItemStatus: UILabel!

    override func awakeFromNib()
    {
        super.awakeFromNib()
    }

    override func setSelected(selected: Bool, animated: Bool)
    {
        super.setSelected(selected, animated: animated)
    }

    func setCell(name: String, status: Int, duration: Int, price: Int)
    {
        self.lblItemName.text     = name
        self.lblItemStatus.text   = String(status)
        self.lblItemDuration.text = "Duration: \(String(duration)) months"
        self.lblItemPrice.text    = String(price) + " $"
    }
}
我在“setCell”方法块中得到错误

我读过很多问题和解决方案,我都试过了,但对我来说都不管用

谢谢你的回答

致以最良好的祝愿

解决方案:我通过将单元格项链接到单元格自身,而不是链接到文件所有者,解决了这个问题。我的问题是这样做的。

您的“单元格”必须为零

使用

可以返回零。你应使用:

tableView.dequeueReusableCellWithIdentifier("cell" forIndexPath:indexPath) as ItemManagementTVCell
这样它就保证了单元格不是零

编辑:也许您可以通过将if语句放在“setCell”中来防止崩溃


对设置在其内部的每个标签执行此操作,并检查崩溃是否仍然发生。如果没有,则必须检查这些标签为何为零。

此问题的另一种解决方案,无需将单元格项目链接到单元格所有者:

let nib = UINib(nibName: "YOUR_CUSTOM_CELL_NIB_NAME", bundle: nil)
tableView.register(nib, forCellReuseIdentifier: "YOUR_CUSTOM_CELL_ID")

你能在setCell块中放置一个断点并检查里面的内容是否为“nil”吗?我认为问题与标签有关,因为当我初始化标签时,它不会引发任何异常,但tableview中没有任何项。它是空的。是否存在与标签相关的错误?我用可能的解决方案编辑了答案。请检查一下。我已经试过了,但它仍然不起作用:(谢谢你的回答。检查那些链接,看看是否有帮助:你能在这里添加解决方案吗?这很简单,我将一步一步地解释它1-)单击你的单元格2-)单击位于右侧“隐藏或显示实用程序”菜单中的连接检查器。3-)单击文件的所有者,如果有任何连接的项目,请删除所有项目。然后单击“单元视图”,并将单元项目连接到该视图。注意:我没有使用故事板。此解决方案适用于XIB@NeoSergio感谢您的澄清,我也有类似的问题,这段代码出现了“致命错误,意外发现为零”。但这太疯狂了,因为如果我插入。。。我可以清楚地看到两者都不是零。更糟糕的是,这是一个间歇性问题。有时有效,有时无效。
if var itemName = self.lblItemName {
    itemName.text = name
}
let nib = UINib(nibName: "YOUR_CUSTOM_CELL_NIB_NAME", bundle: nil)
tableView.register(nib, forCellReuseIdentifier: "YOUR_CUSTOM_CELL_ID")