UITableView 在 iOS 上不刷新
Posted
技术标签:
【中文标题】UITableView 在 iOS 上不刷新【英文标题】:UITableView doesn't refresh on iOS 【发布时间】:2016-04-25 16:50:40 【问题描述】:我的拉动刷新功能确实有效,但不会重新加载数据。如果我关闭并打开应用程序,我可以访问数据,但如果我使用 pull 刷新,我无法加载数据。
var page : Int = 1
var refresher: UIRefreshControl!
override func viewDidLoad()
super.viewDidLoad()
refresher = UIRefreshControl()
refresher.attributedTitle = NSAttributedString(string: "Pull to refresh")
refresher.addTarget(self, action: #selector(newPollsTableViewController.refresh), forControlEvents: UIControlEvents.ValueChanged)
self.tableView.addSubview(refresher)
data_request()
这是我的 data_request() 函数:
func data_request()
let user_id = Data[0].valueForKey("user_id") as? String!
let url:NSURL = NSURL(string: "http://..../perspective/\(user_id!)/page/"+"\(page)" )!
let session = NSURLSession.sharedSession()
self.page = self.page + 1
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "GET"
request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData
let task = session.dataTaskWithRequest(request)
(let data, let response, let error) in
guard let _:NSData = data, let _:NSURLResponse = response where error == nil else
print("error")
return
var json: AnyObject?
do
json = try NSJSONSerialization.JSONObjectWithData(data!, options: [])
catch
return
guard let data_array = json as? NSArray else
return
for i in 0..<data_array.count
if let add = data_array[i] as? NSDictionary
self.obj.append(Obj(data:add))
dispatch_async(dispatch_get_main_queue(), () -> Void in
self.tableView.reloadData()
)
task.resume()
当我拉动刷新表时,我调用了我的刷新函数。
func refresh()
self.page = 1
data_request()
self.refresher.endRefreshing()
每次我拉刷新表时,它都会进入 data_request() 函数,但不会更新表。
【问题讨论】:
您的代码是否到达了对reloadData
的调用,或者它是否命中了return
语句之一?
@rmaddy 它到达了 reloadData
如果删除 () -> Void
会发生什么?
所以你的代码到达reloadData
但数据没有重新加载?
是的,但是在关闭和打开后显示的应用数据
【参考方案1】:
data_request()
self.refresher.endRefreshing()
data_request
是异步方法,它几乎立即返回。因此,您在实际加载数据之前 结束刷新。
您可能应该做的是将endRefreshing
调用移动到数据任务完成闭包中。确保在主队列中调用它。
【讨论】:
你是说在reloadData之后调用endRefreshing?我也试过了,但是还是不行 我建议把它放在这一行之后:(let data, let response, let error) in
我意识到它实际上获取了数据,但没有将其放入表@rmaddy 的第一个单元格以上是关于UITableView 在 iOS 上不刷新的主要内容,如果未能解决你的问题,请参考以下文章
UITableView - 带有背景图像的 UIRefreshControl