如何更新 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()
}
}
}
我有: 项目,写在 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()
}
}
}