如何更新UITableView中的RSS数据?

问题描述 投票:0回答:1

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

我想要什么:激活refreshControl时,应更新单元格中的数据

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

import UIKit

class MainViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var table: UITableView!
    private let url = "https://www.vesti.ru/vesti.rss"
    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()
            }
        }

    }
swift rss nsxmlparser
1个回答
0
投票

一旦获取数据并设置或添加刷新控件,请结束刷新

 @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()
                }
            }

        }
© www.soinside.com 2019 - 2024. All rights reserved.