如何在Swift中的UITableViewController中首先执行解析器委托

时间:2016-03-15 21:19:30

标签: xml swift parsing soap

我是swift编程语言的新手,我正在尝试使用 private void RemoveEvent(ComboBox b, EventHandler handler) { EventInfo f1 = typeof(ComboBox).GetEvent("DropDown"); f1.RemoveEventHandler(b, handler); } NSXMLParserDelegate Web服务连接解析xml,连接工作正常:

soap

解析器委托完成其工作并解析信息:

    struct Datos {
       let nombre:String
       let numero:String
    }

    var data = [Supervisor_Agencia]()

    override func viewDidLoad() {

       print("viewload")           

       var soapMessage = "...The xml message..."

       var urlString = "...The web service url..."
       var url = NSURL(string: urlString)
       var request = NSMutableURLRequest(URL: url!)

       request.HTTPMethod = "POST"
       request.HTTPBody = soapMessage.dataUsingEncoding(NSUTF8StringEncoding)
       request.addValue("...The Host...", forHTTPHeaderField: "Host")
       request.addValue("text/xml; charset=utf-8", forHTTPHeaderField: "Content-Type")
       request.addValue(String(soapMessage.characters.count), forHTTPHeaderField: "Content-Length")
       request.addValue("...The SOAP Action...", forHTTPHeaderField: "SOAPAction")

       var connection = NSURLConnection(request: request, delegate: self, startImmediately: true)
       connection!.start()
       if (connection == true) {
          var mutableData : Void = NSMutableData.initialize()
       }
    }

问题是,当我尝试使用数组“数据”使单元格我意识到函数解析最后执行时,在方法tableView之后,所以我不能使用数组,因为它还没有填充:

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {/*The code*/}
func parser(parser: NSXMLParser, foundCharacters string: String) {/*The code*/}
func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
 print("parser")
 cont = cont + 1
 data.append(Supervisor_Agencia(nombre: descripcion, numero: resultado))}

我知道这是因为“print”的输出顺序是:

1.viewload 2.cont 3.cells 4.parser

我需要这样的命令:

1.viewload 2.parser 3.cont 4.cells

有人能告诉我怎样才能实现这个目标?

1 个答案:

答案 0 :(得分:0)

您遇到的问题是,在您确定的时间内,网络请求不会返回。在您的parser函数返回结果后,请致电self.tableView.reloadData(),然后它会正确使用data填写您的tableView,并根据需要致电所有代表。

在此之前,最简单的方法是创建一个data占位符,这是一个空数组,然后返回0行数和行数(因此你赢了'我不得不担心cellForRowAtIndexPath,因为它不会被调用。