Ios 将UIActivityIndicatorView用于登录过程,但作为I';我正在使用一个线程,我可以';别停下来

Ios 将UIActivityIndicatorView用于登录过程,但作为I';我正在使用一个线程,我可以';别停下来,ios,multithreading,swift,uiactivityindicatorview,Ios,Multithreading,Swift,Uiactivityindicatorview,我使用UIActivityIndicatorView在验证登录详细信息时向用户显示正在发生的事情。下面的代码显示了我正在执行的操作: func confirmLogin(sender: UIButton) { ViewController.gVariables.gUser = userNameText.text ViewController.gVariables.gPwd = passwordText.text ViewController.gVariables.gLog

我使用
UIActivityIndicatorView
在验证登录详细信息时向用户显示正在发生的事情。下面的代码显示了我正在执行的操作:

func confirmLogin(sender: UIButton) {
    ViewController.gVariables.gUser = userNameText.text
    ViewController.gVariables.gPwd = passwordText.text
    ViewController.gVariables.gLoggedIn = ""
    indicatorView.startAnimating()
    passwordText.text = ""

    GetRemoteData.getValidationFromServer( { (svrData) -> Void in
        dispatch_async(dispatch_get_main_queue()) {
            self.indicatorView.stopAnimating()
            self.indicatorView.hidden = true
            MenuViewController.processLogin()
        }
    })
}
用户名和密码被传递到my
GetRemoteData
类中的
getValidationFromServer
方法,该类处理许多其他web服务活动。我将指示器设置为在调用该方法之前开始设置动画,但是下面的代码应该停止指示器,但它与在另一个线程上没有区别


如何关闭指示器?

getValidationFromServer的完成块正在将活动指示器视图的停止分派回主队列。这是正确的做法。当调度回主队列的代码运行时,指示器视图应该停止

如果指示器视图没有停止,那么发生这种情况的逻辑原因只有几个:

  • 您可能在其他地方有一些代码正在再次启动
    指示灯视图
    (例如在
    过程登录

  • 您可能有一些东西阻塞了主线程,从而阻止了发送到主线程的代码的运行

  • 也许你的完成模块根本没有被调用


  • 我建议在调用
    stopAnimating
    的地方放置一个断点或日志消息,看看是否达到了那个点。从那里,您可以诊断问题的根源。但是问题中提供的代码不是问题的根源。

    getValidationFromServer的完成块正在将活动指示器视图的停止调度回主队列。这是正确的做法。当调度回主队列的代码运行时,指示器视图应该停止

    如果指示器视图没有停止,那么发生这种情况的逻辑原因只有几个:

  • 您可能在其他地方有一些代码正在再次启动
    指示灯视图
    (例如在
    过程登录

  • 您可能有一些东西阻塞了主线程,从而阻止了发送到主线程的代码的运行

  • 也许你的完成模块根本没有被调用

  • 我建议在调用
    stopAnimating
    的地方放置一个断点或日志消息,看看是否达到了那个点。从那里,您可以诊断问题的根源。但问题中提供的代码并不是问题的根源