SWIFT:为什么我的信号量不起作用?

时间:2016-06-29 18:29:31

标签: swift

我是第一个承认自己是信号量新手的人。但是,我已经看了几个小时的代码块,而且还有额外的眼睛。出于某种原因," 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()

1 个答案:

答案 0 :(得分:0)

我根据Vadian建议使用NSNotification解决了这个问题。在解析器“parserDidEndDocument”函数中,我添加了:

NSNotificationCenter.defaultCenter().postNotificationName("load", object: nil)

在表视图控制器上,我将以下内容添加到“viewDidLoad”:

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(loadTable), name:"load", object: nil)

就像一个魅力,这是一个功能,我相信我将来会使用很多。谢谢Vadian!