2016-09-19 11 views
0

私は、オンラインのJSONからいくつかの変数を取得する関数を持っています。その1つはApproved変数で、"true"に設定されています。私が関数を呼び出すと、コードが非同期ではないので、Approved変数には値がないので、最初に "拒否"アラートが表示されますが、何をするにしても動作させることはできません。 2回目までに以前の値が保存され、成功アラートが表示されます。非同期ではないコードを選択する

コード:

@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") 
      } 
     } 
    } 
} 
関連する問題