如何更新 UITableView 中的 RSS 数据?

How to update RSS data in UITableView?

我有: 项目,写在 SWIFT5 上,它是一个 rss reader(我使用标准的 XMLParser )。我用来自解析器的数据填充单元格。为了更新单元格中的数据,我实现了 UIRefreshControl 并编写了 objc 方法,该方法包含与我用来获取数据相同的方法(fetchData - 参见代码),但它不起作用。此外,此方法仅在应用程序启动时调用一次。关闭app再打开,数据没有更新...如何处理?

我想要的:当refreshControl被激活时,单元格中的数据应该被更新

我做了什么:我声明了一个名为refreshControl的变量,将其添加到tableView并编写了一个与控件相关的方法#refresh

import UIKit

class MainViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var table: UITableView!
    private let url = "my url"
    private var rssItems: [RSSItem]? {
        didSet {
            DispatchQueue.main.async {
                self.table.reloadData()
            }
        }
    }


    var refreshControl = UIRefreshControl()

    @objc func refresh (sender: UIRefreshControl) {
        fetchData()
        sender.endRefreshing()
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        refreshControl.addTarget(self, action: #selector(refresh(sender:)), for: .valueChanged)
        self.table.refreshControl = refreshControl
        table.addSubview(refreshControl)

       fetchData()


    }

    private func fetchData() {
        let feedParser = FeedParser()
        feedParser.parseFeed(url: url) { (rssItems) in
            self.rssItems = rssItems
            DispatchQueue.main.async {
                self.table.reloadData()
            }
        }

    }

获取数据并设置或添加刷新控件后结束刷新

@objc func refresh (sender: UIRefreshControl) {
    fetchData()
}

override func viewDidLoad() {
    super.viewDidLoad()
    refreshControl.addTarget(self, action: #selector(refresh(sender:)), for: .valueChanged)
    self.table.refreshControl = refreshControl
   // table.addSubview(refreshControl)

   fetchData()
}

private func fetchData() {
    let feedParser = FeedParser()
    feedParser.parseFeed(url: url) { (rssItems) in
        self.rssItems = rssItems // as you are reloading table here
        DispatchQueue.main.async {
            refreshControl.endRefreshing()
          //  self.table.reloadData()
        }
    }
}