TableView RSS Feed Swift 2.0

I am trying to create an rss-feed application with UITableView

to show rss content (title and description). NSXMLparser

works fine, it can get all the information from the website. However, I seem to have a problem getting the information in UITableView

and I can't seem to find where I went wrong!

I have set the cell reuse id UITableView

to cell.

The TitlesTableView is connected as shown in the code as IBOutlet.

Sorry for the long code, but I don't know where it went wrong.

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
}
}

      

+3


source to share


1 answer


It turns out that I did not add the protocol to the class to the UITableViewDataSource (silly to me). Should be:

class SecondViewController: UIViewController, NSXMLParserDelegate, UITableViewDataSource {

      



My confidence just dropped a ton after it took me about a day and a half to decide.

+1


source







All Articles