2016-05-06 2 views
0

私はこのコードNSOperationQueue.mainQueueが動作しないのはなぜですか?

@IBAction func joinButtonTouch(sender: AnyObject) { 
    NSOperationQueue.mainQueue().addOperationWithBlock({ 
     self.joinButton.backgroundColor = UIColor(red: 0/255, green: 122/255, blue: 255/255, alpha: 1.0) 
     self.activityIndicator.startAnimating() 
     self.resultLogIn.text = "Checking data..." 
     }) 


    var response = NetworkManager.sharedInstance.SendRequest("<Command=LogIn><Login=\(loginTextField.text!)><Password=\(passwordTextField.text!)>") 
} 

を持っていると私はactivityIndicator前に開始SendRequest方法を実行していることを望みます。しかし、これはうまくいかなかった。どうして? SendRequestが終了したときに実行中のactivityIndicator

答えて

0

SendRequestでメインスレッドをブロックしています。また、インジケータを開始するように操作をスケジュールしましたが、現在発生しているものの後にキューに入っているため、メインスレッドを解放するまで実行されません。

インジケータの変更を操作に入れないでください。SendRequestを操作に入れて、主スレッドではないキュー、つまりバックグラウンドスレッドで実行してください。すべてがスムーズに動作し、ユーザーは満足しています。

+0

申し訳ありませんが、私はあなたの第2段落を理解していません。 @IBAction func joinButtonTouch(送信側:AnyObject){ self.activityIndi​​cator.startAnimating() self.joinButton.backgroundColor = UIColor(赤:0/255、緑:122/255、青:255/255) 、alpha:1.0) self.resultLogIn.text = "Происходитпроверкаданных..."それは正しいですか?私は 'SendRequest'で何をしなければなりませんか? –

+0

'SendRequest'をバックグラウンドスレッドで実行します。メインスレッドをブロックしないでください。 – Wain

+0

どうやったらいいですか?私は試していますが、何も動かない –

関連する問題