2017-08-18 48 views
1

我在swift中處理請求和響應相當新。這是我堅持使用的代碼。我從dataArray中獲取webservice的值,但不在tableview中加載。請有人幫忙。沒有從Web服務獲取UITableView中的數據

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 
    } 

} 
+2

我認爲ü需要重新加載在您的要求關閉表視圖。 – koropok

+0

@koropok你對了 –

+0

是的..非常感謝..它工作..需要重新加載請求關閉.. –

回答

2
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() 
        } 
       } 
      } 
     } 
    } 
1

不要忘記添加delegatedataSourcetableView

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 
      } 
     } 
    } 
} 
+1

我已經添加委託和數據源到視圖..並感謝它的工作..我在錯誤的地方使用重新加載方法。 –

0

你需要改變你的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) 
      } 
     } 
    } 
} 
相關問題