【问题标题】:UITableView doesn't refresh on iOSUITableView 在 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
  • 如果删除 () -&gt; Void 会发生什么?
  • 所以你的代码到达reloadData但数据没有重新加载?
  • 是的,但是在关闭和打开后显示的应用数据

标签: ios uitableview cocoa-touch nsurlsession


【解决方案1】:
data_request()
self.refresher.endRefreshing()

data_request 是异步方法,它几乎立即返回。因此,您在实际加载数据之前 结束刷新。

您可能应该做的是将endRefreshing 调用移动到数据任务完成闭包中。确保在主队列中调用它。

【讨论】:

  • 你是说在reloadData之后调用endRefreshing?我也试过了,但是还是不行
  • 我建议把它放在这一行之后:(let data, let response, let error) in
  • 我意识到它实际上获取了数据,但没有将其放入表@rmaddy 的第一个单元格
猜你喜欢
  • 1970-01-01
  • 2016-02-16
  • 2019-02-06
  • 2015-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多