未从 Web 服务获取 UITableView 中的数据
Posted
技术标签:
【中文标题】未从 Web 服务获取 UITableView 中的数据【英文标题】:Not getting data in UITableView from web service 【发布时间】:2017-08-18 07:43:41 【问题描述】:我对快速处理请求和响应还很陌生。这是我一直坚持的代码。我从 dataArray 中的 web 服务获取值,但没有加载到 tableview 中。请有人帮忙。
import UIKit
import Foundation
import Alamofire
import SwiftyJSON
class AddOnsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
@IBOutlet weak var tableView: UITableView!
var dataArray = [AnyObject]()
var addOnsURL = "http://econstrademosite.com/food_delivery/?****************"
override func viewDidLoad()
super.viewDidLoad()
self.automaticallyAdjustsScrollViewInsets = false
self.tableView.reloadData()
callData()
@IBAction func goBackToHome(sender: UIBarButtonItem)
let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "base") as! SWRevealViewController
self.present(vc, animated: true, completion: nil)
func callData()
Alamofire.request(addOnsURL).responseJSON response in
let result = response.result
if let dict = result.value as? Dictionary<String, AnyObject>
if let innerDict = dict["data"]?["result"]
self.dataArray = innerDict as! [AnyObject]
print(self.dataArray)
func numberOfSections(in tableView: UITableView) -> Int
return 1
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
print(dataArray.count)
return dataArray.count
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! exampleTableViewCell
let itemName = dataArray[indexPath.row]["item_name"]
cell.label.text! = itemName as! String
return cell
【问题讨论】:
我认为您需要在请求关闭时重新加载表格视图。 @koropok 你是对的 是的.. 非常感谢.. 成功了.. 需要在请求关闭时重新加载.. @K.Mitra - 接受任何一个答案 【参考方案1】: func callData()
Alamofire.request(addOnsURL).responseJSON response in
let result = response.result
if let dict = result.value as? Dictionary<String, AnyObject>
if let innerDict = dict["data"]?["result"]
self.dataArray = innerDict as! [AnyObject]
print(self.dataArray)
if self.dataArray.count > 0
self.tableView.reloadData()
【讨论】:
【参考方案2】:不要忘记为您的tableView
添加delegate
和dataSource
override func viewDidLoad()
super.viewDidLoad()
self.automaticallyAdjustsScrollViewInsets = false
self.tableView.delegate = self
self.tableView.dataSource = self
callData()
然后在获取数据后重新加载tableView:
func callData()
Alamofire.request(addOnsURL).responseJSON response in
let result = response.result
if let dict = result.value as? Dictionary<String, AnyObject>
if let innerDict = dict["data"]?["result"]
self.dataArray = innerDict as! [AnyObject]
print(self.dataArray)
self.tableView.reloadData() // you missing this method
【讨论】:
我已经在视图中添加了委托和数据源。谢谢它的工作。我在错误的地方使用了重新加载方法。【参考方案3】:您需要更改您的 tableview.reloadData() 调用。一旦在 api 调用后得到响应并且您将响应存储在 dataArray
中,您就可以重新加载表。
因此,在您的情况下,在 viewDidLoad() 中重新加载 tableview 是没有意义的,因为您的 dataArray
是空的。
所以请像这样更改callData()
方法
func callData()
Alamofire.request(addOnsURL).responseJSON response in
let result = response.result
if let dict = result.value as? Dictionary<String, AnyObject>
if let innerDict = dict["data"]?["result"]
self.dataArray = innerDict as! [AnyObject]
print(self.dataArray)
【讨论】:
以上是关于未从 Web 服务获取 UITableView 中的数据的主要内容,如果未能解决你的问题,请参考以下文章
服务器未从 restkit 的 web 服务调用接收正文对象
在同步 Web 服务数据上添加 UIActivityIndicatorView 并填充 UITableView
UIImageView+AFNetworking 未从服务器检索最新图像
Tomcat 6 未从 WEB-INF/lib 加载 jars