我是第一个承认自己是信号量新手的人。但是,我已经看了几个小时的代码块,而且还有额外的眼睛。出于某种原因," dispatch_semaphore_signal"永远不会被击中,从而无限期地暂停我的应用程序。我已经成功地在其他视图控制器中使用了信号量,但由于某种原因,这个不能正常工作。有什么想法吗?
let semaphore = dispatch_semaphore_create(0)
_ = deviceSession.dataTaskWithRequest(deviceRequest, completionHandler: { (data, response, error) in
let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding)
if (dataString?.rangeOfString("HTTP Status 403").location != NSNotFound){
print("Access Was Denied")
} else{
let deviceListParser = NSXMLParser(data: data!)
let deviceListParserDelegate = DeviceListParser()
deviceListParser.delegate = deviceListParserDelegate
deviceListParser.parse()
}
dispatch_semaphore_signal(semaphore)
}).resume()
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
self.tableView.reloadData()
答案 0 :(得分:0)
我根据Vadian建议使用NSNotification解决了这个问题。在解析器“parserDidEndDocument”函数中,我添加了:
NSNotificationCenter.defaultCenter().postNotificationName("load", object: nil)
在表视图控制器上,我将以下内容添加到“viewDidLoad”:
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(loadTable), name:"load", object: nil)
就像一个魅力,这是一个功能,我相信我将来会使用很多。谢谢Vadian!