【问题标题】:Refreshing tableView flashes when reloading data刷新tableView刷新数据时闪烁
【发布时间】:2017-09-22 07:29:41
【问题描述】:

因此,由于索引超出范围问题,刷新功能不断使我的应用程序崩溃。然后我在第一次清空我的列表后添加了 reloadData。现在我在刷新时得到这个闪烁,因为它首先加载空列表然后加载填充列表。我应该在哪里清空列表或如何摆脱闪烁?我正在使用 swift 3 和 Xcode 8.2.1

func getData()
{
    fetchedUsers.removeAll()
    self.userTableView.reloadData()

    //myphpfileurl
    var request = URLRequest(url: URL(string: url)!)
    request.httpMethod = "GET"

    let configuration = URLSessionConfiguration.default
    let session = URLSession(configuration: configuration, delegate: nil, delegateQueue: OperationQueue.main)

    let task = session.dataTask(with: request) { (data, response, error) in

        if (error != nil) {
            print("Error")
        }
        else{
            do{
                let fetchedData = try JSONSerialization.jsonObject(with: data!, options: .mutableLeaves) as! NSArray

                for eachFetchedUsers in fetchedData {
                    let eachUsers = eachFetchedUsers as! [String : Any]
                    let id = eachUsers["id"] as! String
                    let name = eachUsers["Nimi"] as! String
                    let email = eachUsers["Sahkoposti"] as! String
                    let company = eachUsers["Yritys"] as! String

                    self.fetchedUsers.append(Users(id : id, name: name, email : email, company: company))

                }
                self.userTableView.reloadData()
                self.refreshControl.endRefreshing()
            }
            catch{
                print("Error 2")
            }
        }
    }
    task.resume()
}

【问题讨论】:

  • self.userTableView.reloadData() self.refreshControl.endRefreshing() 你需要在 MainThread 上调用DispatchQueue.main.async { self.userTableView.reloadData() self.refreshControl.endRefreshing() }

标签: ios swift uitableview refresh indexoutofrangeexception


【解决方案1】:

像这样尝试重新加载表格

DispatchQueue.main.async {
      self.userTableView.reloadData() 
      self.refreshControl.endRefreshing()
  }

【讨论】:

  • 我试图添加这个,但单元格仍然在闪烁,因为它们首先变空。如果我删除第 4 行的 self.userTableView.reloadData() ,当我多次刷新时,应用程序会崩溃。
  • @SimoKorpikoski 在同步模式下调用 Rest API。让一个函数为 rest api 编写代码并从 viewdidload 调用这个函数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 2012-02-06
  • 1970-01-01
  • 2015-07-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多