在我的应用程序上,我正在使用Alamofire实施拉动刷新,该刷新正在工作,但不幸的是没有带回任何数据。我究竟做错了什么?肯定有什么我想念的。
这是代码
我的班级EarthquakeListing
var earthquake: Earthquake?
var refresh = UIRefreshControl()
在viewDidLoad()
上
// Refresh Control
//let refreshControl = UIRefreshControl()
refresh.tintColor = UIColor.yellow
refresh.addTarget(self, action: #selector(refreshData), for: UIControlEvents.valueChanged)
if #available(iOS 10.0, *) {
self.tableView.refreshControl = (self.refresh)
} else {
self.tableView.addSubview(self.refresh)
}
viewDidLoad()
上的Alamofire
Alamofire.request("http://www.seismicportal.eu/fdsnws/event/1/query?limit=50&format=json").responseJSON { response in
//print("Request: \(String(describing: response.request))") // original url
if let data = response.data{
do {
self.earthquake = try
JSONDecoder().decode(Earthquake.self, from: data)
print("features data: \(String(describing: self.earthquake?.features))")
// print("data: \(self.features.count)")
self.tableView.reloadData()
self.refresh.endRefreshing()
}
catch{}
}
}
}
和objc的功能
@objc func refreshData() {
self.tableView.reloadData()
self.refresh.endRefreshing()
}
答案 0 :(得分:0)
在函数中添加Alamofire请求,并在refreshData()
中调用它。对于首次加载数据,您可以在viewDidLoad()
内部调用该函数(包含Alamofire请求)。
func myRequest() {
// Alamofire request goest here.....
/* Inside of Alamofire callback block */
// Assign data to data source
self.tableView.reloadData()
if (self?.refresh.isRefreshing)! {
self.refresh.endRefreshing()
}
/*--------*/
}
override func viewDidLoad() {
super.viewDidLoad()
myRequest()
}
@objc func refreshData() {
myRequest()
}
答案 1 :(得分:-1)
使用以下代码更新您的方法:
@objc func refreshData() {
// start refresh control
self.refresh.beginRefreshing()
// get data from server
Alamofire.request("http://www.seismicportal.eu/fdsnws/event/1/query?limit=50&format=json").responseJSON { response in
if let data = response.data {
do {
self.earthquake = try JSONDecoder().decode(Earthquake.self, from: data)
// End refreshing and reload table
self.refresh.endRefreshing()
self.tableView.reloadData()
}
catch{}
}
}
}