【发布时间】:2016-08-27 12:26:25
【问题描述】:
我的拉动刷新功能确实有效,但它不会重新加载第一个单元格的数据。我的意思是如果我刷新表格单元格是混合的。第一个单元格不会改变,但应该新出现在下面单元格中显示的第一个单元格的新单元格。如果我关闭并打开应用程序,我可以按顺序访问数据,但如果我使用 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() func,但不会更新表。
【问题讨论】:
-
请记住,顺序将始终反映数据源的顺序。在 reloadData 之前放置一个断点并查看数据源。你的问题应该在那里。
-
在加载数据和重新加载表视图之间,您有 3 次调用
return。您是否遇到了这些return声明中的任何一个?使用调试器。这就是它的用途。单步执行代码,看看实际发生了什么。
标签: ios swift uitableview swift2 refresh