自定义UITableView单元导致错误

时间:2016-06-09 21:57:11

标签: ios iphone swift uitableview custom-cell

我的应用是一个简单的RSS阅读器,它使用tableview来显示文章列表。为了显示tableview单元格中每篇文章的图片以及文章的标题和作者,我使用了自定义 UITableViewCell。我为tableview单元格创建了一个类,并为从imageboard中的原型单元格到类的imageview和标签创建了出口。我的自定义tableview单元格的代码如下:

import UIKit

class itemTableViewCell: UITableViewCell {
@IBOutlet weak var itemTitleLabel: UILabel!


@IBOutlet weak var itemImageView: UIImageView!
@IBOutlet weak var itemAuthorLabel: UILabel!
override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

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

    // Configure the view for the selected state
    }
}

此外,在我的 UITableViewController 中,我有 cellForRowAtIndexPath 方法的以下代码:

override func tableView(tableView: UITableView, cellForRowAtIndexPath 
indexPath: NSIndexPath) -> UITableViewCell {


    let cell = tableView.dequeueReusableCellWithIdentifier("cell", 
forIndexPath: indexPath) as! itemTableViewCell

   cell.itemImageView.image = UIImage(named: "placeholder")
    cell.backgroundColor = UIColor.clearColor()

    let item = feedItems[indexPath.row] as MWFeedItem
    cell.itemAuthorLabel.text = item.author
    cell.itemTitleLabel.text = item.title




    if item.content != nil {

        let htmlContent = item.content as NSString
        var imageSource = ""

        let rangeOfString = NSMakeRange(0, htmlContent.length)
        let regex = try? NSRegularExpression(pattern: "(<img.*?src=\")(.*?)(\".*?>)", options: [])

        if htmlContent.length > 0 {
            let match = regex?.firstMatchInString(htmlContent as String, options: [], range: rangeOfString)

            if match != nil {
                let imageURL = htmlContent.substringWithRange(match!.rangeAtIndex(2)) as NSString
                print(imageURL)

                if NSString(string: imageURL.lowercaseString).rangeOfString("feedburner").location == NSNotFound {
                    imageSource = imageURL as String

                }

            }
        }

        if imageSource != "" {
            cell.itemImageView.setImageWithURL(NSURL(string:                       
imageSource)!, placeholderImage: UIImage(named: "placeholder"))
        }
        else{
            cell.itemImageView.image = UIImage(named: "placeholder")
        }

    }
    return cell
}

我还添加了

    var nibName=UINib(nibName: "itemTableViewCell", bundle:nil)
    tableView.registerNib(nibName, forCellReuseIdentifier: "cell")
    tableView.registerClass(itemTableViewCell.self,     
    forCellReuseIdentifier: "cell")

进入我的viewDidLoad()方法。

每当我运行该应用时,我都会在

处收到经典"unexpectedly found nil while unwrapping an Optional value"错误
cell.itemImageView.image = UIImage(named: "placeholder")

在我的cellForRowAtIndexPath方法中。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

删除行

tableView.registerClass(itemTableViewCell.self, forCellReuseIdentifier: "cell")

因为它在没有笔尖的情况下用实例化类的请求替换了前一行,所以你没有在笔尖中定义任何东西......

根据下面的评论,应删除这两个代码行,因为它们会替换故事板应该进行的任何注册。故事板单元格需要添加cell标识符,以便在故事板实例化期间注册,然后可以用于出列。