【问题标题】:UITableView refresh works incorrectlyUITableView 刷新工作不正常
【发布时间】: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


【解决方案1】:

数据源发生奇怪的事情,尝试修改你的caching policy

发件人:

request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData

收件人:

request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData

【讨论】:

  • 我会尝试,我通过在 self.obj.append(Obj(data:add)) 之前添加 self.obj.removeAll() 解决了
  • 好消息,小心你的数据源:)
【解决方案2】:

我通过在self.obj.append(Obj(data:add)) 之前添加self.obj.removeAll() 解决了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多