gpt4 book ai didi

ios - 我在解析 XML 时显示一条错误消息

转载 作者:行者123 更新时间:2023-11-28 08:02:47 25 4
gpt4 key购买 nike

我是 Swift 编程的新手。我有 2 个类来解析 RSS 并显示数据。它被命名为 ParseRSSFeedDetailVC。但是当我想解析时,我看不到 TableView 中的数据。

但是如果我在 DetailVC 中调用 XMLParserDelegate 的方法,它就可以工作。可能是我在调用另一个类的方法时犯了一个错误。

我的代码如下。

我忽略了什么?

解析 XML 的 ParseRSSFeeds 类

import UIKit

class ParseRSSFeeds: XMLParser, XMLParserDelegate{
var parser = XMLParser()
var news = NSMutableArray()
var elements = NSMutableDictionary()
var element = NSString()
var header = NSMutableString()
var link = NSMutableString()
var desc = NSMutableString()
var date = NSMutableString()

func parseFromUrl(){
news = []
parser = XMLParser(contentsOf: NSURL(string: "https://www.wired.com/feed/rss")! as URL)!
parser.delegate = self
parser.parse()
}

func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
element = elementName as NSString

if (elementName as NSString) .isEqual(to: "item") {
elements = NSMutableDictionary()
elements = [:]
header = NSMutableString()
header = ""
link = NSMutableString()
link = ""
desc = NSMutableString()
desc = ""
date = NSMutableString()
date = ""
}
}

func parser(_ parser: XMLParser, foundCharacters string: String) {
if element .isEqual(to: "title"){
header.append(string)
}else if element .isEqual(to: "link"){
link.append(string)
}else if element .isEqual(to: "description"){
desc.append(string)
}else if element .isEqual(to: "pubDate") {
date.append(string)
}
}

func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
if (elementName as NSString) .isEqual(to: "item") {
if !header .isEqual(nil) {
elements.setObject(header, forKey: "title" as NSCopying)
}
if !link .isEqual(nil) {
elements.setObject(link, forKey: "link" as NSCopying)
}
if !desc .isEqual(nil) {
elements.setObject(desc, forKey: "description" as NSCopying)
}
if !date .isEqual(nil) {
elements.setObject(date, forKey: "pubDate" as NSCopying)
}

news.add(elements)
}
}
}

DetailVC(它包括显示 RSS 提要的表格 View 。)

import UIKit

class DetailVC: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tblNews: UITableView!

let parser = ParseRSSFeeds()

override func viewDidLoad() {
super.viewDidLoad()

ParseRSSFeeds().parseFromUrl()
tblNews.reloadData()
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return parser.news.count - parser.news.count + 5
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tblNews.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

if cell .isEqual(NSNull.self) {
cell = Bundle.main.loadNibNamed("cell", owner: self, options: nil)?[0] as! UITableViewCell
}

cell.textLabel?.text = (parser.news.object(at: indexPath.row) as AnyObject).value!(forKey: "title") as? String
cell.detailTextLabel?.text = (parser.news.object(at: indexPath.row) as AnyObject).value!(forKey: "description") as? String

return cell
}
}

最佳答案

您有两个 ParseRSSFeeds 实例,parser 属性和您在 viewDidLoad 中创建的实例。因此,viewDidLoad 正在创建 ParseRSSFeeds 的第二个实例,请求并解析响应,然后丢弃这些结果,保持单独的 parser 属性不变.

您应该让 viewDidLoad 引用 parser 属性,而不是创建 ParseRSSFeeds 的新实例:

override func viewDidLoad() {
super.viewDidLoad()

parser.parseFromUrl()
...
}

关于ios - 我在解析 XML 时显示一条错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46131646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com