如何在按钮单击时刷新表视图

时间:2016-08-11 00:37:40

标签: ios swift uitableview nsurlsession

我想点击一个按钮更改nsurlsession调用的url并立即刷新tableView这是我到目前为止所拥有的

    @IBAction func d(sender: AnyObject) {

    url = NSURL(string: "http://www.json-generator.com/api/json/get/coDxrSkrNe?indent=2")!

    NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) in
        if error != nil {
            print(error!)
        } else {
            do {
                if let restaurants = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? [[String:AnyObject]] {



                    let names = restaurants.flatMap { $0["preferred_name"] as? String }
                    let time = restaurants.flatMap { $0["cooking_time"] as? String }


                    for restaurant in restaurants {
                        if let name = restaurant["preferred_name"] as? String {
                            let cookingTime = ""
                            let food = Food(name: name, time:cookingTime)
                            self.food.append(food)
                        }
                    }



                    dispatch_async(dispatch_get_main_queue()) {
                        self.tableView.reloadData()

                    }

                    print(names)
                }
            } catch let error as NSError {
                print(error)
            }
        }
        }.resume()

    self.tableView.reloadData()


}

以下是我的代码现在的样子,但是在单击按钮后tableView仍未重新加载或更改数据

1 个答案:

答案 0 :(得分:0)

https://github.com/harsh62/stackoverflow_insert_dynamic_rows

我创建了一个虚拟项目,单击刷新并看到数据已添加到表View中。我使用了您创建的相同功能,但添加到我自己的数据源中。我唯一需要做的就是允许项目的任意加载。

如果您的应用程序(例如第三方Web浏览器)需要加载任意内容,Apple会提供一种完全禁用ATS的方法,但我怀疑您谨慎使用此功能:

<key>NSAppTransportSecurity</key>
<dict>
  <!--Include to allow all connections (DANGER)-->
  <key>NSAllowsArbitraryLoads</key>
      <true/>
</dict>

如果你面对这样的事情,那么这里是另一个你可以结账的地方 Transport security has blocked a cleartext HTTP

像这样重新初始化数组。

self.names = [];
for restaurant in restaurants {
    if let name = restaurant["preferred_name"] as? String {
        self.names.append(name)
    }
}