使用 UIActivityIndi​​catorView 进行登录过程,但因为我使用的是线程,所以我无法停止它

Using a UIActivityIndicatorView for Login process but as I'm using a thread I can't stop it

我正在使用 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()
        }
    })
}

用户名和密码被传递到我的 GetRemoteData class 中的 getValidationFromServer 方法,它处理许多其他 Web 服务 activity。我将我的指示器设置为在调用该方法之前开始动画,但以下代码应该停止指示器,但它没有区别,因为它在另一个线程上

如何关闭指示灯?

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

如果指标视图没有停止,只有几个合乎逻辑的原因可能会导致这种情况发生:

  1. 您可能在其他地方有一些其他代码再次启动 indicatorView(例如在 processLogin 中)。

  2. 您可能有一些东西阻塞了主线程,阻止了从 运行 分派到主线程的这段代码。

  3. 也许您的完成块根本没有被调用。

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