2016-09-19 1 views
0

온라인 변수 JSON의 몇 가지 변수를 가져 오는 함수가 있습니다.이 변수 중 하나는 Approved 변수이며 "true"으로 설정됩니다. 함수를 호출 할 때 코드가 비동기 적이기 때문에 Approved 변수에 값이 없으므로 처음으로 "거부 됨"경고가 표시됩니다.하지만 내가 무엇을해도 상관 없으므로 작동하지 않습니다. 두 번째 시간까지 이전 값이 저장되고 성공 알림으로 이동합니다.비동기가 아닌 코드 선택

코드 :

@IBAction func approveuser(_ sender: AnyObject) { 
theplace = place //Saving variable. 

Alamofire.request("https://example.com?variable=\(variable)&requested=\(self.place)").responseJSON{ response in 
if let JSON = response.result.value{ 
let json = JSON as! NSDictionary 
Approved = json["Approved"] as! String 
LoadedVersion = json["version"] as! String 
} 
} 



if(AppVersion != LoadedVersion){ 
self.showalert("Update Required", message: "Please update the app", confirm: "Okay") 
return 
} 

if(Approved == "true"){ 
self.showalert("Approved!", message: "Success", confirm: "Okay") 
}else{ 
self.showalert("Denied!", message: "Denied", confirm: "Okay") 
} 
} 

내가 DispatchQueue.main.async {을 배치 시도했다 어디든지 내가 코드에서 할 수있는하지만 여전히 내가 넣어 상관없이 작동하지 않습니다.

+1

당신은 실제로 비동기 성질을 받아 들여서 콜백에 물건을 사용해야합니다. 정말로 기다려야한다면, http://stackoverflow.com/a/38758847/14955에서와 같이 세마포어를 사용해보십시오. – Thilo

답변

1

메인 큐에 비동기 코드를 넣으시겠습니까?

아래 내용이 의도 한대로 작동한다고 생각합니다.

@IBAction func approveuser(_ sender: AnyObject) { 
    theplace = place //Saving variable. 

    Alamofire.request("https://example.com?variable=\(variable)&requested=\(self.place)").responseJSON{ response in 
     if let JSON = response.result.value{ 
      let json = JSON as! NSDictionary 
      Approved = json["Approved"] as! String 
      LoadedVersion = json["version"] as! String 
     } 

     DispatchQueue.main.async { 

      if(AppVersion != LoadedVersion){ 
       self.showalert("Update Required", message: "Please update the app", confirm: "Okay") 
       return 
      } 

      if(Approved == "true"){ 
       self.showalert("Approved!", message: "Success", confirm: "Okay") 
      }else{ 
       self.showalert("Denied!", message: "Denied", confirm: "Okay") 
      } 
     } 
    } 
} 
관련 문제