我所拥有的:项目是在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()
}
}
}
一旦获取数据并设置或添加刷新控件,请结束刷新
@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()
}
}
}