在为UITableVewCell自定义单元类解包一个Optional值时意外地发现了nil

时间:2015-04-01 13:38:49

标签: ios uitableview swift null optional

当运行表视图的代码时,我试图实例化一个自定义单元格并用值填充它,一切似乎都可以找到,直到它将值放入出口。

情侣笔记:

  1. 我知道这里首选的方法是使用 “tableView.dequeueReusableCellWithIdentifier”然而在此 我正采取不同的方式。

  2. 此外,自定义单元格中的出口连接到故事板中的相应单元格。

  3. 设置适当的代表。

  4. 提前致谢。

    class FavoritesPropertyViewCell: UITableViewCell {
        @IBOutlet weak var activityIndicator: UIActivityIndicatorView!
        @IBOutlet weak var cellPropertyImage: UIImageView!
        @IBOutlet weak var cellRoomsValue: UILabel!
        @IBOutlet weak var cellSpaceValue: UILabel!
        @IBOutlet weak var cellPriceRangeValue: UILabel!
        @IBOutlet weak var cellCityStateZipValue: UILabel!
        @IBOutlet weak var cellAddressValue: UILabel!
    
    }
    

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
    
    var newPropertyCell: FavoritesPropertyViewCell = FavoritesPropertyViewCell()
    
    newPropertyCell.cellRoomsValue.text = "2 rooms"
    newPropertyCell.cellSpaceValue.text = "2000 sqft"
    newPropertyCell.cellPriceRangeValue.text = "20,000"
    newPropertyCell.cellAddressValue.text = "123 that address" 
    newPropertyCell.cellCityStateZipValue.text = "Knoxvegas TN 37777"
    
    return newPropertyCell
    }
    

    The variables shown have values in them.

    最后,错误: 致命错误:在解包可选值时意外发现nil

4 个答案:

答案 0 :(得分:3)

var newPropertyCell: FavoritesPropertyViewCell = FavoritesPropertyViewCell()

没有设置任何插座,因为此处没有与storyboard(xib)进行通信,您只需实例化该类型。因此他们都是零。

正确的方法是使用tableView.dequeueReusableCellWithIdentifier,它将从故事板(注册的xib)加载UI。

答案 1 :(得分:1)

您正在使用var newPropertyCell: FavoritesPropertyViewCell = FavoritesPropertyViewCell(),您的商店没有关联。您的所有@IBOutlet都是零。

答案 2 :(得分:0)

使用以下代码实例化您的单元格:

var cell = NSBundle.mainBundle().loadNibNamed("<Your cell xib name>", owner: nil, options: nil).first as FavoritesPropertyViewCell

当您仅使用FavoritesPropertyViewCell()进行实例化时,它将加载nib并进行必要的插座连接,但这里只会创建一个类实例。

您需要加载nib才能获得完整功能。

答案 3 :(得分:0)

确保xib文件中文件所有者中的类与您尝试加载的类匹配。