我是新來迅速的編程語言,我試圖用NSXMLParserDelegate
解析從soap
Web服務連接的xml
,連接可以正常使用:如何UITableViewController中首先執行解析器委託斯威夫特
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()
}
}
解析器代表,它的工作並分析信息:
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))}
的問題是,當我試圖使用數組「數據」,使我認識到,函數解析執行最後的細胞,AF之三的方法的tableView,所以我不能使用數組,因爲它`尚未填寫:
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print("cont")
return cont
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
print("cells")
let cell = tableView.dequeueReusableCellWithIdentifier("celda", forIndexPath: indexPath) as UITableViewCell
var dat : Supervisor_Agencia
dat = data[indexPath.row]
cell.textLabel?.text = dat.nombre
return cell
}
我知道這是因爲「打印」的輸出順序是這樣的:
1.viewload 2。續3.cells 4.parser
,我需要的順序是這樣的:
1.viewload 2.parser 3.cont 4.cells
誰能告訴我怎樣才能做到這一點?
謝謝,它完美的工作:D –