2016-07-08 2 views
0

ユーザーがデータベースにテキストを挿入するためにボタンを押したときに警告を表示しようとしていますが、すべて正常に機能しますが、応答を取得して、瞬時に動作し、ボタンを押した後、画面のどこかを押すとアラートが表示されます。ボタンが押されるとすぐに来る必要があります。同じ応答を印刷するとうまく動作しますが、アラートを使用すると表示されません。URLからの応答を取得中に遅れて表示される警告

@IBAction func posting(sender: AnyObject) { 


    let request = NSMutableURLRequest(URL: NSURL(string: "https://example.com/appapi/test2.php")!) 
    request.HTTPMethod = "POST" 
    let postString = "a=\(title.text!)" 
    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
     data, response, error inenter code here 

     if error != nil { 
      print("error=\(error)") 
      return 
     } 
     let responseString = "\(NSString(data: data!, encoding: NSUTF8StringEncoding)!)" 
     self.displayR(responseString) 


    } 
    task.resume() 





} 
func displayR(str:String){ 

    var alert = UIAlertController(title: "Description", message: "\(str)" ,preferredStyle: .Alert) 


    alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: { (action) -> Void in })) 

    self.presentViewController(alert, animated: true, completion: nil) 

} 

答えて

1

リクエストでデータタスクを実行すると、コードはバックグラウンドスレッドで実行されます。どのUIの変更(この場合はアラートを表示する)は、メインスレッドで行う必要があります。これを行うには、次のコードで表示関数の呼び出しを行います。

dispatch_async(dispatch_get_main_queue()) { 
//call display function here 
} 
関連する問題