我正在处理应用程序,应该从我的服务器请求一些数据。我使用Alamofire来做这件事,然后使用SWXMLHash来解析XML数据。有两个View控制器,第一个我可以编写一个货件编号,然后覆盖函数prepareForSegue并将该编号发送到下一个应该在viewDidLoad上显示来自服务器和updateUI的数据的View Controller,但事实并非如此。哪里有问题?
我的班级:
class Shipment {
private var _shipmentNumber: String!
private var _shipmentStatus: String!
private var _trackURL: String!
var shipmentNumber: String {
if _shipmentNumber == nil {
_shipmentNumber = ""
}
return _shipmentNumber
}
var shipmentStatus: String {
if _shipmentStatus == nil {
_shipmentStatus = ""
}
return _shipmentStatus
}
init(spNumber: String) {
self._shipmentNumber = spNumber
_trackURL = "..."
}
func requestXmlInformation(completed: DownloadComplete) {
let url = NSURL(string: _trackURL)!
Alamofire.request(.GET, url).responseData { response in
if let xmlToParse = response.data as NSData! {
let xml = SWXMLHash.parse(xmlToParse)
do {
let xmlSpWeight = try xml["fmresultset"]["resultset"]["record"]["field"].withAttr("name", "ТotalWeight")["data"].element!.text! as String
self._shipmentStatus = xmlSpStatus
print(self._shipmentStatus)
} catch let err as NSError {
print(err.debugDescription)
}
}
}
}
}
我的第二个视图控制器
@IBOutlet weak var numberLbl: UILabel!
@IBOutlet weak var weightLbl: UILabel!
@IBOutlet weak var statusLbl: UILabel!
@IBOutlet weak var packageQtyLbl: UILabel!
var shipment: Shipment!
override func viewDidLoad() {
super.viewDidLoad()
shipment.requestXmlInformation { () -> () in
self.updateUi()
print(self.statusLbl.text)
}
}
updateUI功能:
func updateUi() {
numberLbl.text = shipment.shipmentNumber
weightLbl.text = shipment.shipmentWeight
statusLbl.text = shipment.shipmentStatus
packageQtyLbl.text = shipment.shipmentPackageQty
}
它在终端打印数据,但我认为updateUI功能不起作用。
答案 0 :(得分:0)
确保在主线程上调用requestXmlInformation闭包中的代码。您不应该在后台线程中更新UI。
{{1}}
此外,您似乎并未在requestXmlInformation方法中的任何位置调用完整闭包