2016-08-25 8 views
0

XcodeとSwiftでiOSアプリケーションを開発しています。UIがフリーズし、処理が遅れて実行される

私は、このコードに問題がある:

@IBAction func login(sender: AnyObject) { 
     let request = NSMutableURLRequest(URL: NSURL(string: "http://myurl.com/contact/checklogin.php")!) 
     request.HTTPMethod = "POST" 
     let postString = "username=\(username.text!)&password=\(password.text!)" 
     request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 

     let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
      data, response, error in 

      let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
      print("responseString = \(responseString)") 

dispatch_async(dispatch_get_main_queue(),{ 
      if (responseString == "false") { 
       let alert = UIAlertView(title: "Error!", message: "Something is wrong. Please check this!", delegate: nil, cancelButtonTitle: "Okay") 
       alert.show() 
      } 
      else { 
       let alert = UIAlertView(title: "Successful!", message: "You'll get logged in now!", delegate: nil, cancelButtonTitle: "Okay") 
       alert.show() 
      } 
     } 
}) 
     task.resume() 
    } 

このコードでは、ユーザのログは私のサーバー上のPHPザ・スクリプトにユーザー名とパスワードを送信します。このPHPスクリプトは、このデータ/パスワードのペアが実際に存在するかどうかをチェックします。そうであれば「真」、そうでなければ「偽」と応答する。

問題は次のとおりです。 ユーザータップが送信されると(このコードは実行されます)、UIは数秒間フリーズし、アラートにはcaが必要です。 15秒間表示されます。しかし、すぐにprint("responseString = \(responseString)")が印刷されるので、PHPスクリプトミスではありません。私もこのエラーメッセージが表示されます:https://codeshare.io/TGwe6

私は間違って何をしているのですか?

P.S.

私は、多くの考えがパスワードの代わりにハッシュ(空のファイルをチェックするのではなくハッシュのような)に欠けていることを知っています。 これは単なる例です。

P.P.S:コードを更新しました。それは今働いている。

+0

1)は、バックグラウンドスレッドでUIの作業を行うことはありません。 2) 'UIAlertView'は非推奨です。 – rmaddy

+0

2)だから、どうしたらいいですか? –

+0

'UIAlertView'のドキュメントを読むと、代わりに何を使うべきかがわかります。 – rmaddy

答えて

1

メインスレッドでアラートを表示する必要があります。このようにメインスレッドで常にUIの変更を実行します。

dispatch_async(dispatch_get_main_queue(),{ 
    //Show alert 
}) 

注:あなたはそれが推奨されませんのでUIAlertControllerの代わりUIAlertViewを使用する必要があります。

AlertControllerのチュートリアルがたくさんありますが、その一部は次のとおりです。

+0

あなたは英雄です。どうもありがとうございました。それは働いている。私はあなたの答えを受け入れるために8分待たなければならないでしょう。 –

関連する問題