Custom cell: fatal error: unexpectedly found nil while unwrapping an Optional value

岁酱吖の 提交于 2020-01-13 08:52:03

问题


I have a table view with custom cell that was created as .xib . I didnt use storyboard. I have a problem that I couldnt fill my table with the data which came from webservice result. Also, I have 4 labels in the custom cell. In my custom cell class, when I try to set labels for each items, It gives me fatal error like above.

Here is my code:

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
}
}

And my custom cell class is here :

import 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) + " $"
    }
}

I am getting the error inside of "setCell" method block.

I have read a lot of questions and solutions and I tried all of them it doesnt work for me.

Thank you for your answers,

Best regards.

SOLUTION: I've solved this problem by linking the cell items to cell's own instead of linking to File's Owner. My problem has gone by doing this.


回答1:


Another solution to the problem without having to link cell items to the cell owner:

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



回答2:


Your "cell" must be nil.

Using

tableView.dequeueReusableCellWithIdentifier("cell") as ItemManagementTVCell

Can return nil. You should use:

tableView.dequeueReusableCellWithIdentifier("cell" forIndexPath:indexPath) as ItemManagementTVCell

This way it guarantees cells is not nil.

EDIT: Maybe you can prevent the crash by putting if statements inside "setCell"

if var itemName = self.lblItemName {
    itemName.text = name
}

Do that for every label you set inside it and check if the crash still happens. If it don't you must check why those labels are nil.



来源:https://stackoverflow.com/questions/25569516/custom-cell-fatal-error-unexpectedly-found-nil-while-unwrapping-an-optional-va

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!