我是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
有人能告诉我怎样才能实现这个目标?
答案 0 :(得分:0)
您遇到的问题是,在您确定的时间内,网络请求不会返回。在您的parser
函数返回结果后,请致电self.tableView.reloadData()
,然后它会正确使用data
填写您的tableView
,并根据需要致电所有代表。
在此之前,最简单的方法是创建一个data
占位符,这是一个空数组,然后返回0
行数和行数(因此你赢了'我不得不担心cellForRowAtIndexPath
,因为它不会被调用。