REST API:无法填充Tableview

时间:2016-05-12 01:01:22

标签: ios uitableview swift2 alamofire swifty-json

我正在尝试从api中提取数据以填充我的表,但没有显示任何内容。我该如何解决?

已更新 当我将GET请求放在viewDidLoad()或viewDidAppear()中时,我会收到一个空数组

  

GET的结果是[]

我尝试将self.tableView.reload()添加到viewDidLoad()但会抛出此错误

  

对成员' tableView(_:numberOfRowsInSection :)的不明确的引用'

这是我的JSON回复

[
{
"schedule_job_id": 23,
"start_date": "2016-05-01",
"end_date": "2016-05-08",
"building_id": 2,
"building_name": "Republic Plaza",
"building_block_no": "69A",
"building_street_name": "9 Raffles Place Downtown Core",
"building_postal_code": "233645",
"checklist_id": "1",
"checklist_name": "Lightning protection",
"checklist_due_date": "2016-04-12 17:00:00",
"tasks": [
  {
    "submission_id": 105,
    "task_id": "1",
    "task_name": "Inspect Carpark",
    "task_checked": true,
    "task_submitted_date": "2016-05-04 04:39:01",
    "task_comment": null,
    "task_building_level": "1",
    "task_description": "",
    "task_status": "OK",
    "total_rating": null,
    "safety_ratings": [
      {
        "submission_id": 105,
        "safety_rating_id": 79,
        "task_id": "1",
        "name": "Equipment",
        "points": "10",
        "score": "0"
      }
    ],
    "photos": []
  }
]

这是我的GET请求

override func viewDidLoad() {
    usernameLabel.text = Data.sharedInstance.userName
    let url = "http://anyapi.com"
    Alamofire.request(.GET, url).validate().responseJSON { response in
        switch response.result {
        case .Success(let data):
            let json = JSON(data)
            if let data = json["task_name"].arrayValue as [JSON]?{
                self.datas = data
                self.displayTask.reloadData()
                print("result of GET is \(self.datas)")
            }
        case .Failure(let error):
            print("Request failed with error: \(error)")
        }
    }

}

可以在此处查看整个tableview代码https://codeshare.io/aKknb

4 个答案:

答案 0 :(得分:1)

似乎json [“task_name”]不是一个数组而不是第一级,而是task数组中对象的属性,这就是为什么你得到一个空数组。

如果您打算在tableview中显示目标

,则应该执行此类操作
if let data = json["tasks"].arrayValue as [JSON]?{

答案 1 :(得分:0)

因为发出HTTP请求的代码是错误的方法。你打算将它放在viewDidLoad()中,但实际上你把它放在didReceiveMemoryWarning()

答案 2 :(得分:0)

不要将人口放在viewDidLoad中,而是在viewDidAppear中尝试...这样就可以设置tableview并能够正确填充。

答案 3 :(得分:0)

您可以在ViewWillAppear中启动HTTP请求并重新加载tableview。这样就可以正确加载tableview。