我正在尝试使用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
}
}
答案 0 :(得分:1)
原来我没有将UITableViewDataSource协议添加到类中(愚蠢的我)。 应该是:
class SecondViewController: UIViewController, NSXMLParserDelegate, UITableViewDataSource {
在我花了大约一天半的时间解决之后,我的信心只下降了一点。