表格视图无法在设备上显示

时间:2018-04-18 10:59:00

标签: ios json swift

我正在开发iOS应用程序,我希望在我的设备中显示表格内容。但无法获取和显示...但内容正在控制台视图上显示。 我正在使用json getmethod()来获取详细信息 还使用视图控制器和视图表以及快速语言

import UIKit

class UpdateSheetManagementViewController:
UIViewController, UITableViewDelegate, UITableViewDataSource, WebserviceDelegate {

    //var FinalArray = [[String:Any]]()

//    class func instantiateFromStoryboard() -> UpdateSheetManagementViewController {
//        let storyboard = UIStoryboard(name: "Management", bundle: nil)
//        return storyboard.instantiateViewController(withIdentifier: String(describing: self)) as! UpdateSheetManagementViewController
//    }

    @IBOutlet weak var managementTableView: UITableView!
    var controllerType : String!
    var array = [[String : Any]]()

    override func viewDidLoad() {
        super.viewDidLoad()
        title = controllerType
        updatesheetWebserviceCall()

    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
//        updatesheetWebserviceCall()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()

    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 320.0
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return array.count
    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//        let cell = tableView.dequeueReusableCell(withIdentifier: "UpdateSheetManagementTableViewCell", for: indexPath) as! UpdateSheetManagementTableViewCell
    let cellIdentifier : String = "UpdateSheetManagementTableViewCell";
        let cell : UpdateSheetManagementTableViewCell =
            tableView.dequeueReusableCell(withIdentifier: cellIdentifier) as! UpdateSheetManagementTableViewCell
        let dict = array[indexPath.section]
        cell.classname.text = dict["Cls_Name"] as? String
        cell.dateFrom.text = dict["Date_From"] as? String
        cell.date_To.text = dict["Date_To"] as? String
        cell.downloadButton.tag = indexPath.row
        cell.downloadButton.addTarget(self, action: #selector(onDownloadButtonClicked(button:)), for: .touchUpInside)

        return cell
    }


    func onDownloadButtonClicked(button : UIButton) {
        let postion = button.tag
        let data = array[postion]
        let attachment = data["Attachment"] as? String
        if(attachment != nil && attachment!.characters.count > 0){
            let userid = UserDefaults.standard.string(forKey: USER_ID)
            let finalString = "https://skillskool.mycit.co.in/PagesParentApp/Today-ClassNotes.aspx?FilePath=" + attachment! + "&UserId=" + userid! + "&PageName=UpdateSheet"
            let url = URL(string: finalString)
            if(url != nil){
                UIApplication.shared.open(url!, options: [:], completionHandler: nil)
            }

        }

    }

    func updatesheetWebserviceCall() {

        let str = ""
        let webClass = WebserviceClass()
        webClass.delegate = self
        webClass.fireRequest(functionName: "MgmtUpdateSheet.php", requestString: str, view: view)
    }

    func webserviceDidFinishWith(response: [String : Any], functionName: String) {
        parseUpdateSheetWebservice(response: response)
    }

    func parseUpdateSheetWebservice(response : [String : Any]) {
        let arr = response["homework"] as? [[String : Any]]
        if(arr != nil){
           // array.removeAll()
            self.array.append(contentsOf: arr!)
           // managementTableView.reloadData()
        }
    }


}

5 个答案:

答案 0 :(得分:1)

更新数据后添加managementTableView.reloadData(),并确保在视图控制器或故事板中设置委托和数据源

答案 1 :(得分:0)

您必须设置viewDidLoad

managementTableView.dataSource = self

并取消评论managementTableView.reloadData()

 func parseUpdateSheetWebservice(response : [String : Any]) {
    let arr = response["homework"] as? [[String : Any]]
    if(arr != nil){
       // array.removeAll()
        self.array.append(contentsOf: arr!)
      DispatchQueue.main.async { 
        managementTableView.reloadData() }
    }
}

答案 2 :(得分:0)

在viewDidLoad中设置tableview委托和数据源,并在Web服务响应中重新加载tableview。

// set tableview delegate and datasource in viewDidLoad
override func viewDidLoad() {
    super.viewDidLoad()
    title = controllerType
    managementTableView.dataSource = self
    //managementTableView.delegate = self
    updatesheetWebserviceCall()
}


// reload tableview upon web service response
func parseUpdateSheetWebservice(response : [String : Any]) {
    let arr = response["homework"] as? [[String : Any]]
    if(arr != nil){
       // array.removeAll()
        self.array.append(contentsOf: arr!)
        self.managementTableView.reloadData()

        /* 
        // or reload table using main queue, if you web service operation is in background queue
        DispatchQueue.main.async {
          self.managementTableView.reloadData()
        }
        */
    }
}

答案 3 :(得分:0)

我认为错过了delegatedatasource个关联,请在viewDidLoad函数中添加以下代码:

self.managementTableView.delegate = self;
self.managementTableView.dataSource = self;

答案 4 :(得分:0)

首先,您需要设置tableview dataSource和委托,并在加载数据后还需要重新加载数据。

self.managementTableView.delegate = self;

self.managementTableView.datasource = self;

重新加载数据:

 self.array.append(contentsOf: arr!)
 self.managementTableView.reloadData()