我的应用是一个简单的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
方法中。
非常感谢您的帮助!
答案 0 :(得分:1)
删除行
tableView.registerClass(itemTableViewCell.self, forCellReuseIdentifier: "cell")
因为它在没有笔尖的情况下用实例化类的请求替换了前一行,所以你没有在笔尖中定义任何东西......
根据下面的评论,应删除这两个代码行,因为它们会替换故事板应该进行的任何注册。故事板单元格需要添加cell
标识符,以便在故事板实例化期间注册,然后可以用于出列。