REST API: 无法填充 Tableview
REST API: Cannot populate Tableview
我正在尝试从 api 中提取数据来填充我的 table,但没有显示任何内容。我该如何解决?
已更新
当我在 viewDidLoad() 或 viewDidAppear() 中放置 GET 请求时,我会收到一个空数组
result of GET is []
我尝试将 self.tableView.reload() 添加到 viewDidLoad() 但会抛出此错误
Ambiguous reference to member '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)")
}
}
}
完整的table查看代码可以在这里看到https://codeshare.io/aKknb
因为发出 HTTP 请求的代码使用了错误的方法。你打算把它放在 viewDidLoad() 中,但实际上你把它放在 didReceiveMemoryWarning()
与其将填充放在 viewDidLoad 中,不如在 viewDidAppear 中尝试...这样 tableview 就全部设置好了并且能够正确填充。
似乎 json["task_name"] 不是数组,也不是第一级,而是任务数组中对象的 属性,这就是为什么你得到一个空数组。
如果你打算在你的表格视图中显示任务,你应该做这样的事情
if let data = json["tasks"].arrayValue as [JSON]?{
您可以在 ViewWillAppear 中启动 HTTP 请求并重新加载 tableview.That tableview 正确加载的方式。
我正在尝试从 api 中提取数据来填充我的 table,但没有显示任何内容。我该如何解决?
已更新 当我在 viewDidLoad() 或 viewDidAppear() 中放置 GET 请求时,我会收到一个空数组
result of GET is []
我尝试将 self.tableView.reload() 添加到 viewDidLoad() 但会抛出此错误
Ambiguous reference to member '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)")
}
}
}
完整的table查看代码可以在这里看到https://codeshare.io/aKknb
因为发出 HTTP 请求的代码使用了错误的方法。你打算把它放在 viewDidLoad() 中,但实际上你把它放在 didReceiveMemoryWarning()
与其将填充放在 viewDidLoad 中,不如在 viewDidAppear 中尝试...这样 tableview 就全部设置好了并且能够正确填充。
似乎 json["task_name"] 不是数组,也不是第一级,而是任务数组中对象的 属性,这就是为什么你得到一个空数组。
如果你打算在你的表格视图中显示任务,你应该做这样的事情
if let data = json["tasks"].arrayValue as [JSON]?{
您可以在 ViewWillAppear 中启动 HTTP 请求并重新加载 tableview.That tableview 正确加载的方式。