0
나는 세마포어가 처음 인 것을 처음으로 인정할 것이다. 그러나, 나는이 코드 블록을 몇 시간 동안 보았고 추가적인 눈 세트가 필요할 것입니다. 어떤 이유로 "dispatch_semaphore_signal"이 절대 부딪히지 않아 내 앱이 무기한 중단됩니다. 다른 뷰 컨트롤러에서 세마포를 성공적으로 사용했지만 어떤 이유로이 세마포어가 작동하지 않습니다. 어떤 아이디어?SWIFT : 내 세마포어가 작동하지 않는 이유는 무엇입니까?
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()
세마포어를 잊어 버리고 테이블 뷰를 완료 핸들러에 다시로드하라. 비동기 작업을 해결하기위한 세마포는 프로그래밍 습관이 매우 나쁜 편입니다. – vadian
안녕하세요, 저는 이것을 게시하기 전에 성공하지 못했습니다. 내 테이블에 값이 없습니다. 그런 다음 화면에서 값을 스크롤하면 다시 초점을 맞출 때 값이 채워집니다. – GED125
그러면 세마포어가 문제를 해결하지 못합니다. 나는 NSXMLParser에 익숙하지 않지만이 클래스가 * didFinish *를 나타내는 delegate 메서드에서 테이블 뷰를 비동기 적으로 다시로드하는 경우에도 사용됩니다. – vadian