tableView RSS feed Swift 2.0

时间:2015-07-14 10:22:51

标签: ios uitableview rss swift2

我正在尝试使用UITableView创建一个rss-feed应用,以显示RSS内容(标题和说明)。 NSXMLparser工作正常,它可以从网站获取所有信息。但是我似乎在将信息输入UITableView时遇到问题,我似乎无法找到我做错的地方!

我已将UItableView的单元格的reuseIdentifier设置为Cell。

titlesTableView如代码所示连接为IBOutlet。

我很抱歉长码,但我不知道它出了什么问题。

import UIKit

class SecondViewController: UIViewController, NSXMLParserDelegate {

var xmlParser: NSXMLParser!
var entryTitle: String!
var entryDescription: String!
var entryLink: String!
var currentParsedElement:String! = String()
var entryDictionary: [String:String]! = Dictionary()
var entriesArray:[Dictionary<String, String>]! = Array()



@IBOutlet var titlesTableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    self.titlesTableView.estimatedRowHeight = 40.0
    let urlString = NSURL(string: "http://www.skeppsfast.se/aktuellt.feed?type=rss")
    let rssUrlRequest:NSURLRequest = NSURLRequest(URL:urlString!)

    let queue:NSOperationQueue = NSOperationQueue()
    NSURLConnection.sendAsynchronousRequest(rssUrlRequest, queue: queue) {
        (response, data, error) -> Void in

        self.xmlParser = NSXMLParser(data: data!)
        self.xmlParser.delegate = self
        self.xmlParser.parse()
    }

}

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


//MARK: NSXMLParserDelegate
func parser(parser: NSXMLParser!,
    didStartElement elementName: String!,
    namespaceURI: String!,
    qualifiedName: String!,
    attributes attributeDict: [String : String]!){
        if elementName == "title"{
            entryTitle = String()
            currentParsedElement = "title"
        }
        if elementName == "description"{
            entryDescription = String()
            currentParsedElement = "description"
        }
        if elementName == "link"{
            entryLink = String()
            currentParsedElement = "link"
        }
}

func parser(parser: NSXMLParser!,
    foundCharacters string: String!){
        if currentParsedElement == "title"{
            entryTitle = entryTitle + string
        }
        if currentParsedElement == "description"{
            entryDescription = entryDescription + string
        }
        if currentParsedElement == "link"{
            entryLink = entryLink + string
        }
}

func parser(parser: NSXMLParser!,
    didEndElement elementName: String!,
    namespaceURI: String!,
    qualifiedName qName: String!){
        if elementName == "title"{
            entryDictionary["title"] = entryTitle
        }
        if elementName == "link"{
            entryDictionary["link"] = entryLink
        }
        if elementName == "description"{
            entryDictionary["description"] = entryDescription
            entriesArray.append(entryDictionary)
        }
}

func parserDidEndDocument(parser: NSXMLParser!){
    dispatch_async(dispatch_get_main_queue(), { () -> Void in
        self.titlesTableView.reloadData()
    })
}
// MARK: UITableViewDataSource
func tableView(tableView: UITableView,
    cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{

        var cell:UITableViewCell! = tableView.dequeueReusableCellWithIdentifier("Cell")as UITableViewCell!

        if (nil == cell){
            cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "Cell")
        }
        cell!.textLabel?.text = entriesArray[indexPath.row]["title"]
        cell!.textLabel?.numberOfLines = 0
        cell!.detailTextLabel?.text = entriesArray[indexPath.row]["description"]
        cell!.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator

        return cell
}

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

1 个答案:

答案 0 :(得分:1)

原来我没有将UITableViewDataSource协议添加到类中(愚蠢的我)。 应该是:

class SecondViewController: UIViewController, NSXMLParserDelegate, UITableViewDataSource {

在我花了大约一天半的时间解决之后,我的信心只下降了一点。