无法将UITableViewCell类型的值转换为“ActuTblCell”

时间:2015-10-30 08:48:53

标签: ios swift uitableview

我正在尝试使用自动高度排的RSS阅读器,但我收到此错误:

Could not cast value of type 'UITableViewCell' (0x1117bfc68) to 'package.ActuTblCell' (0x10fedca70).

ActualitesViewController

import UIKit

@objc
protocol ActualitesViewControllerDelegate {
    optional func toggleLeftPanel()
    optional func collapseSidePanels()
}

class ActualitesViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, NSXMLParserDelegate {
    @IBOutlet var tableView: UITableView!

    var parser = NSXMLParser()
    var posts = NSMutableArray()
    var elements = NSMutableDictionary()
    var element = NSString()
    var title1 = NSMutableString()
    var date = NSMutableString()
    var dscrptn = NSMutableString()

    override func viewDidLoad()
    {
        super.viewDidLoad()
        self.navigationController?.navigationBar.barTintColor = UIColor(red: 38.0/255.0, green: 51.0/255.0, blue: 85.0/255.0, alpha: 1.0)
        self.navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "Gotham", size: 13)!, NSForegroundColorAttributeName : UIColor.whiteColor()]
        self.title = "ACTUALITÉS"

        let nib = UINib(nibName: "actuVwCell", bundle: nil)
        tableView.registerNib(nib, forCellReuseIdentifier: "cell")


        self.beginParsing()
    }

    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func beginParsing()
    {
        posts = []
        parser = NSXMLParser(contentsOfURL:(NSURL(string:"http://www.solutis.fr/actualites-rachat-credit,rss.html"))!)!
        parser.delegate = self
        parser.parse()

        tableView!.reloadData()
    }

    //XMLParser Methods

    func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String])
    {
        element = elementName
        if (elementName as NSString).isEqualToString("item")
        {
            elements = NSMutableDictionary()
            elements = [:]
            title1 = NSMutableString()
            title1 = ""
            date = NSMutableString()
            date = ""
            dscrptn = NSMutableString()
            dscrptn = ""
        }
    }

    func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?)
    {
        if (elementName as NSString).isEqualToString("item") {
            if !title1.isEqual(nil) {
                elements.setObject(title1, forKey: "title")
            }
            if !date.isEqual(nil) {
                elements.setObject(date, forKey: "date")
            }
            if !dscrptn.isEqual(nil) {
                elements.setObject(dscrptn, forKey: "dscrptn")
            }

            posts.addObject(elements)
        }
    }

    func parser(parser: NSXMLParser, foundCharacters string: String)
    {
        if element.isEqualToString("title") {
            title1.appendString(string)
        } else if element.isEqualToString("pubDate") {
            date.appendString(string)
        } else if element.isEqualToString("description") {
            dscrptn.appendString(string)
        }
    }

    //Tableview Methods

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return posts.count
    }


    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
    }

    func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    {
        return basicCellAtIndexPath(indexPath)
    }


    func basicCellAtIndexPath(indexPath:NSIndexPath) -> ActuTblCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! ActuTblCell

        setTitleForCell(cell, indexPath: indexPath)
        setSubtitleForCell(cell, indexPath: indexPath)
        return cell
    }

    func setTitleForCell(cell:ActuTblCell, indexPath:NSIndexPath) {
        cell.titleActuCell?.text = posts.objectAtIndex(indexPath.row).valueForKey("title") as! NSString as String
    }

    func setSubtitleForCell(cell:ActuTblCell, indexPath:NSIndexPath) {
        cell.descriptionActuCell?.text = posts.objectAtIndex(indexPath.row).valueForKey("dscrptn") as! NSString as String
    }
}

ActuTblCell

import UIKit

class ActuTblCell: UITableViewCell {
    @IBOutlet var titleActuCell: UILabel!

    @IBOutlet var descriptionActuCell: UILabel!

    @IBOutlet var dateActuCell: 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
    }
}

在我的主板上,我有:

  • 我的场景类是:ActualitesViewController
  • 我的TableViewCell类是:ActuTblCell

enter image description here

2 个答案:

答案 0 :(得分:2)

您的单元格类是ActuTblCell,但是您正在使用名称actuVwCell

注册nib

let nib = UINib(nibName: "actuVwCell", bundle: nil)

检查一下,问题就在这里。否则,建议根据类别命名笔尖。

答案 1 :(得分:1)

您的代码在此处有错误:

let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! ActuTblCell

您忘记将自定义类Cell设置为ActuTblCell。

Sample here